是否可以在同一个事件的UIButton上添加多个目标操作,如下所示?
[button addTarget:self action:@selector(xxx) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:object action:@selector(yyy) forControlEvents:UIControlEventTouchUpInside];
我制作了一个快速的应用程序来对其进行测试,并且它执行了按钮按下时的两项操作。
我想知道这样做是否是一种好习惯,执行顺序是否也将始终保持不变?
谢谢。
编辑:我确实找到了这个post,它说它的添加顺序相反,即,最近添加的目标首先被调用。但这还没有得到确认
答案 0 :(得分:1)
是的,可以向一个按钮添加多个操作。
我个人更希望代表来订阅该按钮。
让您要添加为object
的{{1}}订阅委托的方法,以便当您按下按钮时它可以接收事件。
或
将事件转发到其他方法以完全控制的单个操作
快速的简单测试
target
一键后输出:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let button = UIButton(frame: CGRect(x: 50, y: 50, width: 300, height: 30))
button.backgroundColor = .orange
button.addTarget(self, action: #selector(action1), for: .touchUpInside)
button.addTarget(self, action: #selector(action2), for: .touchUpInside)
button.addTarget(self, action: #selector(actionHandler), for: .touchUpInside)
self.view.addSubview(button)
}
@objc func actionHandler(_ sender: UIButton){
print("actionHandler")
action1(sender)
action2(sender)
}
@objc func action1(_ sender: UIButton) {
print("action1")
}
@objc func action2(_ sender: UIButton) {
print("action2 \n")
}
}
您可以在正常添加动作时确认执行顺序吗
是的,它按照您设置目标的顺序执行。