swift - addAction 和 addTarget 有什么区别
问题描述
我在考虑按钮点击事件,我们有不同的选择
- UITapGestureRecognizer
- 添加目标
- 添加动作
对于基本操作,让我们说
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 文档,在那里找不到太多内容,我想知道两者之间的区别以及我应该更多使用哪一个
解决方案
该addTarget(_:action:for:)
方法使用目标/动作,即旧的基于 Objective-C 的动态调度方法,您可以在其中提供目标对象和选择器。
如果您的目标是 iOS ≥14,则可以使用addAction(_:for:)
允许您提供UIAction
包含闭包的对象的较新版本。它更现代,但不适用于 iOS <14。
推荐阅读
- python - 布尔值更改时的 Pandas 增量值
- python - 如何使用 css_parser 来获取这个属性?
- go - JWT 认证策略
- compiler-construction - 在低级中间代码中计算数组和其他非标量的活跃度
- javascript - 如何根据javascript中的多个键对数组进行分组和转换?
- ios - 从字符串数组中查找最常见的子字符串
- python-3.x - 网页抓取,python,请求,下载 pdf 文件,身份验证
- qr-code - 对 QR 码的每个部分进行着色,例如计时模式和格式信息
- symfony - Symfony:如果他还没有使用 LDAP 身份验证的帐户,请注册用户
- swift - 如何访问 ParentViewController 的功能