Swift 4:以编程方式创建的按钮 addTarget 在委托类中崩溃

何塞·托马斯

我创建了一个委托协议,用于创建 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift-IBAction,委托,addTarget

iOS:在Swift中重新创建addTarget()的最佳实践?

以编程方式在swift ios中创建复选框按钮

如何以编程方式隐藏 Swift 4 中的按钮

以自定义类以编程方式创建UIView(Swift 4)

UITableViewCell addTarget中的按钮不起作用

UIControl.appearance().addTarget 停止在 Swift 4 上工作

为什么addTarget不会在Swift中删除?

Swift addTarget 到按钮并从 UIview 文件调用不同视图控制器文件中的函数

在Swift中以编程方式居中按钮

在Swift中以编程方式调用UITabBarController委托

以编程方式在不同类别的Swift中创建一个按钮

在Swift 1.2中将约束添加到以编程方式创建的按钮

在Swift中以编程方式创建NSTextField

在Swift中以编程方式创建UITableView

在Swift中以编程方式创建SKTileMapNode

在Swift中以编程方式创建UITableViewCell

在iOS Swift中以编程方式创建Segues

在TouchUpInside上的Swift addTarget错误

如何在Swift 4中以编程方式禁用iPhone主页按钮?

如何在Swift 4中以编程方式向按钮添加IBAction?

addTarget到集合视图的笔尖中的按钮动作

带有uibutton.addTarget到UIView的Swift类不起作用

Android以编程方式创建的类onClick的按钮

在Swift4中创建一个函数以编程方式从字符串数组创建UILabel

关于UITableViewCell内的按钮的addTarget

Swift - UIControl addTarget 不起作用

在 Swift 中以编程方式在 UITableViewCell 中创建 UICollectionView

在 Swift 中从 API 结果以编程方式创建 JSON 数据