Застревает с добавлением цели в кнопку в программном режиме 3
Я создал UIButton с помощью Swift 3, и я хочу, чтобы он печатал какое-то сообщение при нажатии.
Итак, я сделал что-то вроде этого:
В loadView()
button.addTarget(self, action: #selector(ViewController.pressButton(button:)), for: .touchUpInside)
Метод:
func pressButton(button: UIButton) {
NSLog("pressed!")
}
Но ничего не происходит, когда я нажимаю кнопку.
Ответы
Ответ 1
Добавьте код кнопки в свой viewDidLoad
, и он будет работать для вас:
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
button.backgroundColor = UIColor.gray
button.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
self.view.addSubview(button)
}
func pressButton(button: UIButton) {
NSLog("pressed!")
}
Вам не нужно добавлять ViewController.pressButton
в selector
, этого достаточно с помощью function name
.
версия Swift 4.x:
let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
button.backgroundColor = .gray
button.tag = 0
button.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside)
self.view.addSubview(button)
@objc func pressButton(_ button: UIButton) {
print("Button with tag: \(button.tag) clicked!")
}
Ответ 2
попробуйте это в Swift3!
button.addTarget(self, action: #selector(self.pressButton(button:)), for: .touchUpInside)
@objc func pressButton(button: UIButton) { NSLog("pressed!") }
Ответ 3
Используйте следующий код.
button.addTarget(self, action: #selector(FirstViewController.cartButtonHandler), for: .touchUpInside)
Ваше имя класса соответствует FirstViewController
И ваш селектор соответствует следующей функции
func cartButtonHandler() {
}
Ответ 4
В быстрой 3 используйте это -
object?.addTarget(objectWhichHasMethod, action: #selector(classWhichHasMethod.yourMethod), for: someUIControlEvents)
Например (из моего кода) -
self.datePicker?.addTarget(self, action:#selector(InfoTableViewCell.datePickerValueChanged), for: .valueChanged)
Просто укажите имя :
после имени метода, если вы хотите, чтобы отправитель был как параметр.
Ответ 5
Вы отмечаете, что вызов addTarget
находится в loadView()
. Является ли это в вашем пользовательском подзадаче, какого-то рода или viewController?
Из вашего селектора он нацеливается на метод в вашем классе ViewController
, но если target
для этого действия является самим представлением, то имеет смысл, что действие не проходит.
Если вы объявите свою кнопку в viewController и в viewDidLoad
добавите эту цель, как указано выше, тогда сообщение должно быть напечатано по вашему желанию. Я считаю, что вы "нацеливаете" не тот класс на свое действие.
Ответ 6
let cancelButton = UIButton.init(frame: CGRect(x: popUpView.frame.size.width/2, y: popUpView.frame.size.height-20, width: 30, height: 30))
cancelButton.backgroundColor = UIColor.init(patternImage: UIImage(named: cancelImage)!)
cancelButton.addTarget(self, action: #selector(CommentsViewController.canceled), for:.touchUpInside)
Ответ 7
- Добавить код кнопки в
override func viewDidLoad()
метод
-
Убедитесь, что ваш обработчик с тегом @IBAction выглядит следующим образом:
@IBAction func pressButton (кнопка: UIButton) { печать ( "нажата!" )
}
Тогда это сработает!