Вы никогда не получите shouldChangeCharactersInRange
, вызванный с помощью пользовательской клавиатуры.
То, что вы можете получить, это событие UIControlEventEditingChanged
из UITextField
. Поэтому вместо того, чтобы полагаться на метод shouldChangeCharactersInRange
(который, как известно, содержит ошибки), вы должны полагаться на это событие, которое будет запускаться каждый раз, когда пользователь изменяет содержимое текстового поля.
[textField addTarget:self action:@selector(myTextfieldChangedMethod:) forControlEvents:UIControlEventEditingChanged];
Если вы изменяете текстовое поле с помощью пользовательской клавиатуры, просто вызовите этот метод, чтобы уведомить всех слушателей о событии UIControlEventEditingChanged
.
[textField sendActionsForControlEvents:UIControlEventTouchUpInside];