Как установить inputDelegate для UITextField?

У меня есть UIAlertView, содержащий UITextField:

UITextField *textField = [alertView textFieldAtIndex:0];

Теперь я хочу установить свойство inputDelegate для textField:

[textField setInputDelegate:self];

Мой контроллер представления (я) соответствует UITextInputDelegate и имеет метод

- (void)textDidChange:(id<UITextInput>)textInput;

но по какой-то причине этот метод никогда не вызывается, когда я меняю текст в текстовом поле. Поэтому я предполагаю, что мой контроллер представления не установлен как inputDelegate textField.

В документации указано:

Система ввода текста автоматически назначает делегата этому свойству во время выполнения. Представление, использующее протокол UITextInput, обязано уведомить делегата ввода в соответствующие моменты времени.

Означает ли это, что я не могу изменить inputDelegate текстового поля?

Как я могу добиться того, чтобы textField действительно вызывал метод делегата textDidChange: в моем контроллере представления при каждом изменении его содержимого?


person Mischa    schedule 19.07.2013    source источник
comment
когда-нибудь находили решение по этому поводу?   -  person Just a coder    schedule 20.01.2016
comment
Не то чтобы я припоминаю. Я думаю, что в итоге я реализовал свой собственный класс представления предупреждений.   -  person Mischa    schedule 20.01.2016


Ответы (2)


У меня такой же опыт, что inputdelegate никогда не будет работать.

Я нашел эту страницу для вас,

делегат ввода

Однако, чтобы решить вашу проблему, я предлагаю вам вместо этого использовать делегата!

UITextField *textField = [alertView textFieldAtIndex:0];

textField.delegate = self;
person kvh    schedule 19.07.2013
comment
Вы предлагаете создать новый UITextField и установить для него делегата self. Это не решит проблему, потому что (1) я хочу использовать UITextField, предоставляемый классом UIAlertView, и (2) мне удалось установить делегат текстового поля с помощью [textField setDelegate:self], но я не могу установить его inputDelegate. [textField setInputDelegate:self] не работает. - person Mischa; 19.07.2013
comment
хм, почему вы хотите использовать inputdelegate? получать уведомления при изменении текста? - person kvh; 19.07.2013
comment
да. Я знаю, что существует метод делегирования текстового поля textField: shouldChangeCharactersInRange: replacementString:, но этот метод вызывается до фактического изменения текста текстового поля. Мне нужно выполнить тест после изменения текста. - person Mischa; 19.07.2013
comment
Это не реализовано в классе UIAlertView. См. выше: (1) я хочу использовать UITextField, предоставляемый классом UIAlertView. - person Mischa; 19.07.2013
comment
Итак, я думаю, что настраиваемый вид оповещения с текстовым представлением может это сделать. - person kvh; 19.07.2013

Я не знаю, как установить inputDelegate для UITextField, но вы можете следить за UITextFieldTextDidChange уведомлением вашего UITextField, чтобы получать уведомления после его текст был изменен.

person ma11hew28    schedule 13.08.2017