Использование протокола 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.

Другие вопросы по тегам