addAction和addTarget之间的区别是什么?

3

我在考虑按钮点击事件,我们有不同的选择

  • UITapGestureRecognizer
  • addTarget
  • addAction

对于一个基本操作,比如说

button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)

@objc private func buttonClicked () {
    print("button clicked")
}

不过,我们可以使用以下方法而无需通过objc函数或选择器执行相同的操作:

extension UIControl {
    func addAction(for controlEvents: UIControl.Event = .touchUpInside, _ closure: @escaping()->()) {
        addAction(UIAction { (action: UIAction) in closure() }, for: controlEvents)
    }
}

button.addAction(for: .touchUpInside) { [weak self] in
      guard let self = self else {return}
      self.buttonClicked()
}

func settingsClicked () {
    print("settings clicked")
}

我查看了苹果的addAction文档,没有找到太多信息,想知道两者之间的区别以及应该更多使用哪一个。


iOS 14+addAction 使用方式。addTarget(_:action:for:) 是旧的方法。除了只适用于 14+ 版本之外,target 参数非常重要。如果你想让另一个对象处理它,这样更容易,对吧?你仍然可以将其添加到 addAction() 的闭包中。 - undefined
https://www.biteinteractive.com/control-target-and-action-in-ios-14/ - undefined
1个回答

4

addTarget(_:action:for:) 的方式使用目标/操作,这是旧的基于Objective-C的动态分派方法,在其中提供了一个目标对象和一个选择器。

如果您的目标是面向iOS ≥14,您可以使用较新的addAction(_:for:),它允许您提供一个包含闭包的UIAction对象。 这更加现代化,但不适用于iOS<14。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接