Использование протокола UITextInput для UITextField и UITextView для управления результатами выбора в случае сбоя
UITextField и UITextView оба принимают протокол UITextInput. Свойство selectedRange UITextView возвращает NSRange, где UITextField не имеет никаких свойств / методов выбора. Я хотел бы использовать одну подпрограмму для управления вставкой в UITextField или UITextView.
Поэтому я делаю следующее:
id<UITextInput> textInput = nil;
if ([self.aTextView isFirstResponder]) {
textInput = self.aTextView;
} else if ([self.aTextField isFirstResponder]) {
textInput = self.aTextField;
}
if (textInput != nil) {
UITextRange * selectedRange = textInput.selectedTextRange;
// ...
}
Только для быстрого сбоя с "нераспознанным селектором, отправленным экземпляру" в свойстве selectedTextRange.
Что я делаю неправильно?
[EDIT: кажется, работает в iOS 5, но вылетает на устройстве в iOS 4. Это изменение в iOS 5? Документы говорят, что протокол 3.2+.]
2 ответа
В моем собственном приложении я убедился, что UITextView и UITextField завершаются с -[UITextView selectedTextRange]: unrecognized selector
в симуляторе iOS 4, но не в симуляторе iOS 5.
Ответ на этот вопрос предполагает, что соответствие UITextInput является новой вещью в iOS 5: могу ли я выбрать определенный блок текста в UITextField?, Таким образом, похоже, что сам протокол является iOS 3.2, но UITextView/Field не использовал этот протокол до iOS 5.
Правка @ Абсента верна. UITextField
не начал следовать UITextInput
протокол до iOS 5.