Вы должны удалить селектор в качестве аргумента инициализатора.Вы должны установить цель, где бы вы ни создавали кнопку.Также вам нужно поставить @objc для handleButton
, который будет вызываться Selector
.Ваша установка будет выглядеть следующим образом:
class customButton: UIButton {
let titleName: String
init(titleName: String) {
self.titleName = titleName
super.init(frame: .zero)
self.setTitle(titleName, for: .normal)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class viewController: UIViewController {
override func loadView() {
super.loadView()
let testButton = customButton(titleName: "Test")
testButton.translatesAutoresizingMaskIntoConstraints = false
testButton.addTarget(self, action: Selector("handleButton"), for: .touchUpInside)
view.addSubview(testButton)
testButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
testButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@objc func handleButton() {
print("Pressed")
}
}
В последних Swift
вы должны изменить Selector("handleButton")
на #selector(handleButton)
Если вы хотите сохранить текущую реализацию,вам нужно взять аргумент target
в инициализаторе customButton
, как показано ниже,
init(titleName: String, selectorName: String, target: UIViewController) {
self.titleName = titleName
self.selectorName = selectorName
super.init(frame: .zero)
self.setTitle(titleName, for: .normal)
self.addTarget(target, action: Selector(selectorName), for: .touchUpInside)
}
Теперь вы передадите ссылку ViewController
, как это,
let testButton = customButton(titleName: "Test", selectorName: "handleButton", target: self)
И нене забудьте пометить handleButton
с objc
как,
@objc func handleButton() {