我创建了一个委托协议,用于创建 UIButton 并将其添加到父视图中。
protocol ButtonInputFactoryDelegate {
func buttonAction(in formFactory: SubmitInputFactory)
}
在委托类中,我有两种方法,一种用于创建按钮,第二种用于实现委托的按钮操作。
class myButtonClass {
(...)
func setupButton() {
guard let delegate = self.delegate else { return }
// Button creation and setup
submitButton.addTarget(self.parentViewController, action: #selector(internalButtonAction(_:)), for: .touchUpInside)
self.parentViewController.view.addSubview(submitButton)
}
@objc func internalButtonAction(_ sender: UIButton) {
guard let delegate = self.delegate else { return }
delegate.buttonAction(in: self)
}
}
在 viewController 中,我有以下内容
class TestViewController: UIViewController, ButtonInputFactoryDelegate {
override func viewDidLoad() {
(...)
myButtonClass.delegate = self
myButtonClass.setupButton()
}
func buttonAction(in formFactory: SubmitInputFactory) {
print("Test")
}
}
然后当点击按钮时,它应该被调用internalButtonAction
并在里面执行delegate.buttonAction
Xcode 编译它没有错误,但是当点击按钮时出现以下错误
(...) unrecognized selector sent to instance 0x102139200
任何想法可能会发生什么?谢谢!
在按钮类中给按钮添加动作:
class MyButtonClass {
var submitButton: UIButton = UIButton()
(...)
func setSubmitAction(_ target: Any, action: Selector) {
self.submitButton.addTarget(target, action: action, for: .touchUpInside)
}
}
在 ViewController 上使用它时,它必须是这样的:
myButtonClassInstance().setSubmitAction(self, action: #selector(self.submitButtonAction(_:)))
使用 ViewController 中定义的操作,例如:
@objc func submitButtonAction(_ sender: UIButton) {
print("Test")
}
的@objc
需要传递函数作为选择器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句