У меня есть подкласс UITextField, используемый для вызова двух методов после определенных событий textField.TextField вызывает методы в суперклассе textField с настройкой делегата / протокола.
class SearchTermCellTextField: UITextField {
var searchTermCellTextFieldDelegate: SearchTermCellTextFieldDelegate?
override var text: String? {
didSet {
searchTermCellTextFieldDelegate?.textFieldDidChange(self)
}
}
override func deleteBackward() {
super.deleteBackward()
searchTermCellTextFieldDelegate?.textFieldReceivedDelete(self)
}
}
protocol SearchTermCellTextFieldDelegate {
func textFieldReceivedDelete(_ textField: UITextField)
func textFieldDidChange(_ textField: UITextField)
}
Делегат инициализируется правильно, и textFieldReceivedDelete()
вызывается без проблем.Однако каждый раз, когда вызывается textFieldDidChange()
(в var text { didSet }
), searchTermCellTextFieldDelegate
имеет значение nil.
Я попытался поместить searchTermCellTextFieldDelegate?.textFieldDidChange()
во вторичный метод, вызываемый didSet, чтобы увидеть, будет ли он иметьлюбой эффект, но все тот же.Я проверил его изнутри deleteBackward()
- там, где он мне не нужен - и searchTermCellTextFieldDelegate?
имеет ненулевое значение, как и ожидалось, и работает нормально.
Мое единственное предположение, что происходит нечто более сложноев текстовой переменной { get set }
, которая вызывает проблему, но кроме этого я не знаю, с чего начать решение проблемы.
У кого-нибудь есть понимание?Заранее спасибо.