gpt4 book ai didi

快速添加目标类

转载 作者:可可西里 更新时间:2023-11-01 01:57:21 25 4
gpt4 key购买 nike

我有一个类,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 并向其添加一个目标。我知道目标已成功添加,因为当我打印 view.allTargets 时,我可以看到刚刚添加的目标。

@IBOutlet weak var textField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

Listner(view: textField, event: .editingChanged) {
print("listen")
}

}

当我像上面那样调用类并在文本字段中键入时,永远不会调用 actionEvent()

最佳答案

需要将Listner做成一个成员变量,这样调用viewDidLoad后才不会超出作用域。如果它是一个成员变量,那么在对您的控件进行任何编辑时都会调用它。

class ViewController : UIViewController {
@IBOutlet weak var textField: UITextField!
var listner : Listner!

override func viewDidLoad() {
super.viewDidLoad()

self.listner = Listner(view: textField, event: .allEditingEvents) {
print("listen")
}
}
}

关于快速添加目标类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51034056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com