具有相同事件的多个目标动作的UIButton

时间:2019-05-21 18:10:19

标签: ios objective-c uibutton

是否可以在同一个事件的UIButton上添加多个目标操作,如下所示?

[button addTarget:self action:@selector(xxx) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:object action:@selector(yyy) forControlEvents:UIControlEventTouchUpInside];

我制作了一个快速的应用程序来对其进行测试,并且它执行了按钮按下时的两项操作。

我想知道这样做是否是一种好习惯,执行顺序是否也将始终保持不变?

谢谢。

编辑:我确实找到了这个post,它说它的添加顺序相反,即,最近添加的目标首先被调用。但这还没有得到确认

1 个答案:

答案 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")
  }
}
  

您可以在正常添加动作时确认执行顺序吗

是的,它按照您设置目标的顺序执行。