在没有自我的情况下使用addTarget(target:action :)

时间:2018-09-25 00:05:18

标签: ios swift uikit

除了自我(似乎是最常见的用例)以外,有没有办法在其他事物上使用addTarget

2 个答案:

答案 0 :(得分:2)

是的,您可以使用self以外的目标。最常见的用法是使用addTarget调用self,其中self是对viewController的引用,该视图将UIControl添加到其视图层次结构中。但是您并不需要那样使用它。 target只是对对象的引用,因此您可以将其传递给所需的任何对象。 actionSelector,需要将其定义为该对象的class上的实例方法,并且该方法必须可用于Objective-C(标记为{{1} }或@objc),并且必须不带任何参数,仅带@IBActionsendersender

您还可以传递event作为目标,它告诉iOS在响应者链中搜索nil方法。


这是一个独立的例子:

action

答案 1 :(得分:1)

您当然可以设置其他对象来接收控制动作。考虑以下视图控制器:

首先,定义一个班级的工作是响应按钮轻击动作:

@objc class ButtonTarget: NSObject {
    @IBAction func buttonAction(_ sender: Any) {
        print("In \(#function)")
    }
}

现在定义一个创建ButtonTarget对象的视图控制器

class ViewController: UIViewController {

    @IBOutlet weak var button: UIButton!

    lazy var buttonTarget = ButtonTarget() //Give the ViewController a `ButtonTarget`

    override func viewDidLoad() {
        super.viewDidLoad()

        //Add a taret/action to the button that invokes the method `buttonAction(_:)`
        button.addTarget(
          buttonTarget, 
          action: #selector(ButtonTarget.buttonAction(_:)), 
          for: .touchUpInside)
    }
}