Вы используете неправильный метод делегата.textFieldShouldReturn:
вызывается, когда пользователь нажимает клавишу возврата.(Не тогда, когда контроль пытается «вернуться» с поля, если вы об этом думали.)
Вместо этого вы должны реализовать textFieldShouldEndEditing:
.Именно здесь вы можете (попытаться) остановить текстовое поле от потери статуса первого респондента и держать клавиатуру включенной.Просто проверьте текст, как вы делаете, и верните ДА или НЕТ (пусть система обновит статус первого респондента).
Если вы хотите, чтобы клавиша возврата отклоняла клавиатуру, если ввод действителен, вы должны вызвать endEditing:
там.Например:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
return [textField endEditing:NO];
}
Параметр NO
означает, что его не форсируют, и, в основном, ваш код textFieldShouldEndEditing:
сначала проверяет текст.(Вы должны всегда звонить endEditing:
, если можете, а не resignFirstResponder
.)
Обратите внимание, что по различным причинам текстовое поле может быть вынуждено в любом случае отказаться от статуса первого респондента, так что даже если выпроверяйте входные данные таким образом, будьте готовы проверить его еще раз, прежде чем сохранить его на диск или отправить по сети, или все, что вы хотите с ним сделать.