UITextField: переместить вид при появлении клавиатуры
В настоящее время я работаю над приложением для 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
}
Однако у этого решения есть простой недостаток: когда я заканчиваю редактировать одно из «скрытых» текстовых полей и касаюсь другого текстового поля, клавиатура исчезает, вид перемещается вниз, вид снова поднимается и клавиатура снова появляется.
Есть ли возможность предотвратить исчезновение и повторное появление клавиатуры между двумя правками («скрытых» текстовых полей), чтобы представление перемещалось только тогда, когда выбранное текстовое поле изменится с того, которое будет скрыто клавиатурой, на то, которое не будет скрыто )?