Попытка создания пользовательских классов делегатов для 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
, брошено следующее сообщение об ошибке:
/// Type 'MyDelegate' does not conform to protocol 'NSObjectProtocol'
Привет, вам нужно оставить ссылку на класс MyDelegate, или он получит dealloc. – koropok
#Facepalm! Я просто столкнулся с этой проблемой с другим классом. Это даст вам выстрел; благодаря! – AnthonyW
@ koropok Оглядываясь на него, не должно ли поле 'delegate' содержать ссылку на MyDelegate? – AnthonyW