有没有办法在不使用选择器的情况下响应UIButton点击?

时间:2017-10-04 17:50:37

标签: ios swift closures uigesturerecognizer

响应UIButton点击的标准方法是:

  1. 使用IBAction静态链接方法和点击事件。
  2. 使用UITapGestureRecognizer,指定targetaction(选择器)。
  3. 我希望事件处理程序快速block / closure,它们更灵活(没有特定的目标/操作),并允许重新配置。

    有没有办法在不跳过目标/行动的环节的情况下做到这一点?

    顺便说一句,我正在使用Swift 3。

    我已阅读此问题,该问题使用私有方法: Gesture Recognizers and Blocks

1 个答案:

答案 0 :(得分:3)

您可以创建自己的按钮子类,它将选择器语法包装在基于闭包的API周围。

class MyButton: UIButton {

    var action: (() -> ())?

    override init(frame: CGRect) {
        super.init(frame: frame)
        sharedInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sharedInit()
    }

    private func sharedInit() {
        addTarget(self, action: #selector(touchUpInside), for: .touchUpInside)
    }

    @objc private func touchUpInside() {
        action?()
    }

}

然后要向按钮添加动作,您只需设置闭包。

let button = MyButton()
button.action = {
    print("hello")
}