在UIButton上是否有与addTarget不同的选项

时间:2018-04-09 18:19:19

标签: ios swift uibutton

addTarget

所以我知道你可以在一个按钮上使用addTarget 像这样:

import UIKit

class ViewController: UIViewController {
    func calledMethod(_ sender: UIButton!) {
        print("Clicked")
    }

     override func viewDidLoad() {
        super.viewDidLoad()

        let btn = UIButton(frame: CGRect(x: 30, y: 30, width: 60, height: 30))
        btn.backgroundColor = UIColor.darkGray
        btn.addTarget(self, action: #selector(self.calledMethod(_:)), for: UIControlEvents.touchUpInside)
        self.view.addSubview(btn)
    }
}

这个工作绝对没问题,但我只是想知道是否有另一种方法来检测何时点击某些内容并在发生时运行一些代码。

3 个答案:

答案 0 :(得分:1)

您可以在故事板中添加按钮,并为其动作创建一个出口。

@IBAction func buttonAction(_ sender: UIButton) {
  //implement your code here
}

答案 1 :(得分:0)

您还可以查看RxSwift/RxCocoa或类似内容。所有更改和操作都会自动添加,您可以决定是否要观察它们。

代码看起来像这样:

   let btn = UIButton(frame: CGRect(x: 30, y: 30, width: 60, height: 30))
   btn.backgroundColor = UIColor.darkGray
   btn
      .rx
      .tap
      .subscribe(onNext: {
          print("Clicked")
      }).disposed(by: disposeBag)
   view.addSubview(btn)    

答案 2 :(得分:0)

按钮是UIControl的子类。 UIControl旨在使用目标/操作来指定在指定操作发生时要运行的代码。如果您不想使用该机制,则必须创建等效的。

您可以将点击手势识别器附加到其他对象,并将其userInteractionEnabled标志设置为true,但手势识别器 使用目标/操作模式。

我的建议是“不要担心并学会爱按钮”。只是学会使用目标/行动。

另一种可能性:创建UIButton的自定义子类,在初始时将其自身设置为自己的目标(特别是在init(coder:)init(frame:)中,需要实现的2个init方法对于视图对象。)此按钮将包含一个闭包数组,如果按下按钮,其操作方法将执行。它将有添加或删除闭包的方法。然后,您可以在视图控制器中放置这样一个按钮,并调用该方法添加所需的闭包。