除了自我(似乎是最常见的用例)以外,有没有办法在其他事物上使用addTarget
?
答案 0 :(得分:2)
是的,您可以使用self
以外的目标。最常见的用法是使用addTarget
调用self
,其中self
是对viewController的引用,该视图将UIControl
添加到其视图层次结构中。但是您并不需要那样使用它。 target
只是对对象的引用,因此您可以将其传递给所需的任何对象。 action
是Selector
,需要将其定义为该对象的class
上的实例方法,并且该方法必须可用于Objective-C(标记为{{1} }或@objc
),并且必须不带任何参数,仅带@IBAction
或sender
和sender
。
您还可以传递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)
}
}