2
試圖爲UITextViewDelegate
和UITextFieldDelegate
創建自定義委託類。當我將這些類設置爲他們自己的委託,或者將其他UIKit組件設置爲他們的委託時,一切正常。但是,如果我創建自己的類作爲委託,委託方法從不會被調用。爲什麼?自定義UITextViewDelegate/UITextFieldDelegate未調用
這工作:
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
,下面則拋出Error:
/// Type 'MyDelegate' does not conform to protocol 'NSObjectProtocol'
嗨,你需要保持對MyDelegate類的引用,否則它會得到dealloc。 – koropok
#Facepalm!我只是碰到了另一個班的這個問題。會給那一槍;謝謝! – AnthonyW
@koropok回想一下,不應該'delegate'字段本身保持對MyDelegate的引用? – AnthonyW