Да, вы можете использовать цель, отличную от self
.Наиболее распространенное использование - это вызов addTarget
с self
, где self
является ссылкой на viewController, который добавляет UIControl
к своей иерархии представления.Но вы не обязаны использовать это таким образом.target
- это просто ссылка на объект, поэтому вы можете передать ему ссылку на любой объект, который вы хотите.action
- это Selector
, который должен быть определен как метод экземпляра для class
этого объекта, и этот метод должен быть доступен Objective-C (отмечен @objc
или @IBAction
), и ондолжны принимать либо параметры, либо sender
, либо sender
и event
.
. Вы также можете передать nil
в качестве цели, что говорит iOS о поиске цепочки респондента для поискаaction
метод.
Вот небольшой автономный пример:
import UIKit
class Foo {
@objc func buttonClicked() {
print("clicked")
}
}
class ViewController: UIViewController {
let foo = Foo()
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 50, y: 200, width: 100, height: 30))
button.setTitle("Press me", for: .normal)
button.setTitleColor(.blue, for: .normal)
button.addTarget(foo, action: #selector(Foo.buttonClicked), for: .touchUpInside)
self.view.addSubview(button)
}
}