次のコードを使用してフレーム サイズを変更し、キーボードの表示/非表示に対応します。
- (void)moveCodeViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up {
NSDictionary* userInfo = [aNotification userInfo];
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardEndFrame;
[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];
CGRect newFrame = codeView.frame;
CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil];
keyboardFrame.size.height += keyboardToolbar.frame.size.height;
keyboardFrame.size.height += 10;
newFrame.size.height -= keyboardFrame.size.height * (up?1:-1);
codeView.frame = newFrame;
[UIView commitAnimations];
}
このコードは、キーボードの表示/非表示時にアニメーション化される他のサブビューに対して繰り返されます。
UITextField をタップすると、すべてのアニメーションが適切に表示されます。しかし、すぐに UITextView をタップすると、以前にアニメーション化されていたすべての要素 (UIToolbar、UITextView、UIWebView) が元のフレーム (位置とサイズ) に戻り、アニメーション化されなくなります。UITextField が firstResponder のときにキーボードを閉じると、要素は元のフレームに戻りますが、再びアニメーション化されます。
非常に奇妙...
人々が尋ねると思うからです:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"textFieldDidEndEditing");
}
前もって感謝します!