Использование протокола UITextInput для UITextField и UITextView для управления результатами выбора в случае сбоя - PullRequest
3 голосов
/ 28 октября 2011

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.

Что я делаю не так?

[ПРАВКА: кажется, работает в iOS 5, но вылетает на устройстве в iOS 4. Это изменение в iOS 5?Документы говорят, что протокол составляет 3,2 +.]

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

В своем собственном приложении я убедился, что UITextView и UITextField аварийно завершают работу с -[UITextView selectedTextRange]: unrecognized selector в симуляторе iOS 4, но не в симуляторе iOS 5.

Ответ на этот вопрос предполагает, что соответствие UITextInput является новой вещью в iOS 5: Могу ли я выделить определенный блок текста в UITextField? . Таким образом, похоже, что сам протокол является iOS 3.2, но UITextView / Field не использовал этот протокол до iOS 5.

1 голос
/ 24 мая 2012

@ Правка Абсента верна.UITextField не начал следовать протоколу UITextInput до iOS 5.

...