У меня есть класс, Listner
:
class Listner {
typealias ListenerType = () -> ()
var listeners: [ListenerType] = []
init<V: UIControl>(view: V, event: UIControlEvents, listener: @escaping ListenerType) {
print("Init") // Prints
view.addTarget(self, action: #selector(actionEvent), for: event)
self.listeners.append(listener)
}
@objc private func actionEvent() {
print("EventChanged") // Does not print
self.listeners.forEach { (listner) in
listner()
}
}
}
, который принимает вид, который является UIControl
, и добавляет к нему цель.Я знаю, что цель успешно добавлена, потому что когда я печатаю view.allTargets
, я вижу только что добавленную цель.
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
Listner(view: textField, event: .editingChanged) {
print("listen")
}
}
Когда я вызываю класс, как я делал выше, и печатаю в текстовое поле, actionEvent()
никогда не звонил.