Ответ 1
Хороший вопрос. Но кажется, чтоUITextInputDelegate
не является протоколом, который вы реализуете.
Из Apple Docs под заголовком Технологии обработки текста ниже уровня:
Когда изменения происходят в текстовом представлении из-за внешних причин, т.е. они не вызваны вызовами из системы ввода текста -
UITextInput
объект должен отправитьtextWillChange:
,textDidChange:
,selectionWillChange:
иselectionDidChange:
на вход делегат (на который он ссылается). Например, когда пользователи текстовое представление, и вы задаете диапазон выделенного текста, чтобы разместить точки ввода под пальцем, вы отправитеselectionWillChange:
перед изменением выбранного диапазона, и вы отправляетеselectionDidChange:
после изменения диапазона.
И из docs в UITextInputDelegate:
UIKit предоставляет частный делегат ввода текста, который он присваивает при runtime к свойству inputDelegate объекта, класс которого принимает UITextInput протокол.
Подразумевается, что мы не реализуем эти методы делегатов; мы используем их, чтобы сообщить inputDelegate
, что вы изменили свой текст или выбор с помощью других средств, кроме ввода с клавиатуры.
Вот пример , который иллюстрирует это:
- (void)delete:(id)sender;
{
if (selection && ![selection isEmpty]) {
[inputDelegate textWillChange:self];
[inputDelegate selectionWillChange:self];
[self replaceRange:selection withText:@""];
[inputDelegate selectionDidChange:self];
[inputDelegate textDidChange:self];
}
}
Пример кода с большим количеством примеров здесь.