私は現在、入力用の複数のUITextFieldを持つ単一のビューを持つiPhoneアプリケーションに取り組んでいます。キーボードが表示されると、下部のテキストフィールドにオーバーレイされます。そこで、対応する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];
}
}
このメソッドは、メッセージのソースがキーボードの表示時に表示されるテキストフィールドの1つであるかどうかをチェックし、そうでない場合はビューを上に移動します。
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
}
ただし、このソリューションには単純な欠陥があります。「非表示」テキストフィールドの1つを編集し終えて別のテキストフィールドに触れると、キーボードが消え、ビューが下に移動し、ビューが再び上に移動して、キーボードが再び表示されます。
(「非表示」テキストフィールドの)2つの編集の間にキーボードが消えて再表示されないようにする可能性はありますか?選択したテキストフィールドがキーボードによって非表示になるものから非表示にならないものに変更されたときにのみビューが移動するようにします)?