试图为UITextViewDelegate和UITextFieldDelegate创建自定义委托类。当我将这些类设置为它们自己的委托,或者将另一个UIKit组件设置为它们的委托时,一切都正常。但是,如果我创建自己的类作为委托,则永远不会调用委托方法。为什么?
这工作:
class MyTextView: UITextView, UITextViewDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}
func textViewDidChange(_ textView: UITextView) {
print("I work")
}这不是:
class MyTextView: UITextView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = MyDelegate()
}
class MyDelegate: NSObject, UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print("I work")
}
}注:如果MyDelegate没有子类NSObject,则引发以下错误:
/// Type 'MyDelegate' does not conform to protocol 'NSObjectProtocol'
发布于 2016-12-21 02:41:51
在第二种情况下设置文本字段委托时,您将创建MyDelegate()类的弱引用。您可以检查以下代码,这将通过创建MyDelegate()的强引用来解决您的问题。
class MyTextView: UITextView {
var responseDelegate = MyDelegate()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = responseDelegate
}
}
class MyDelegate: NSObject, UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
print("I work")
}
}https://stackoverflow.com/questions/41253656
复制相似问题