В настоящее время я работаю над приложением iPhone с одним представлением, которое имеет несколько UITextFields для ввода. Когда клавиатура показывает, она накладывает нижние текстовые поля. Поэтому я добавил соответствующий метод textFieldDidBeginEditing:
, чтобы переместить вид вверх, который отлично работает:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
if ( ( textField != inputAmount ) && ( textField != inputAge ) ) {
NSTimeInterval animationDuration = 0.300000011920929;
CGRect frame = self.view.frame;
frame.origin.y -= kOFFSET_FOR_KEYBOARD;
frame.size.height += kOFFSET_FOR_KEYBOARD;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
self.view.frame = frame;
[UIView commitAnimations];
}
}
Этот метод проверяет, является ли источник сообщения одним из текстовых полей, которые видны при отображении клавиатуры, а если нет, он перемещает представление вверх.
Я также добавил метод textFieldDidEndEnditing:
, который снова перемещает представление вниз (и обновляет некоторые объекты модели в соответствии с измененным вводом):
- (void)textFieldDidEndEditing:(UITextField *)textField {
if ( ( textField != inputMenge ) && ( textField != inputAlter ) ) {
NSTimeInterval animationDuration = 0.300000011920929;
CGRect frame = self.view.frame;
frame.origin.y += kOFFSET_FOR_KEYBOARD;
frame.size.height -= kOFFSET_FOR_KEYBOARD;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
self.view.frame = frame;
[UIView commitAnimations];
}
// Additional Code
}
Однако это решение имеет простой недостаток: когда я заканчиваю редактирование одного из "скрытых" текстовых полей и касаюсь другого текстового поля, клавиатура исчезает, вид перемещается вниз, вид снова поднимается и клавиатура снова появляется.
Есть ли возможность удержать клавиатуру от исчезновения и повторного появления между двумя изменениями ( "скрытых" текстовых полей - так, чтобы представление перемещалось только тогда, когда выбранное текстовое поле изменяется от того, которое будет скрыто с клавиатуры, до того, что будет не скрывать)?