原文连接:
http://www.devdiv.com/thread-70159-1-1.html
实现以下三个方法,如果弹出的键盘会遮住输入框
,整体的界面会向上移动,这样就不会遮住输入框了。自己增加UITextFieldDelegate委托。
只适合iPhone,如果想要支持iPad,只要把216改成iPad上面键盘的高度即可。
1 - (void)keyboardWillShow:(NSNotification *)noti
2 {
3 //键盘输入的界面调整
4 //键盘的高度
5 float height = 216.0;
6 CGRect frame = self.view.frame;
7 frame.size = CGSizeMake(frame.size.width, frame.size.height - height);
8 [UIView beginAnimations:@"Curl"context:nil];//动画开始
9 [UIView setAnimationDuration:0.30];
10 [UIView setAnimationDelegate:self];
11 [self.view setFrame:frame];
12 [UIView commitAnimations];
13 }
14
15
16 - (BOOL)textFieldShouldReturn:(UITextField *)textField
17 {
18 // When the user presses return, take focus away from the text field so that the keyboard is dismissed.
19 NSTimeInterval animationDuration = 0.30f;
20 [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
21 [UIView setAnimationDuration:animationDuration];
22 CGRect rect = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height);
23 self.view.frame = rect;
24 [UIView commitAnimations];
25 [textField resignFirstResponder];
26 return YES;
27 }
28
29 - (void)textFieldDidBeginEditing:(UITextField *)textField
30 {
31 CGRect frame = textField.frame;
32 int offset = frame.origin.y + 32 - (self.view.frame.size.height - 216.0);//键盘高度216
33 NSTimeInterval animationDuration = 0.30f;
34 [UIView beginAnimations:@"ResizeForKeyBoard" context:nil];
35 [UIView setAnimationDuration:animationDuration];
36 float width = self.view.frame.size.width;
37 float height = self.view.frame.size.height;
38 if(offset > 0)
39 {
40 CGRect rect = CGRectMake(0.0f, -offset,width,height);
41 self.view.frame = rect;
42 }
43 [UIView commitAnimations];
44 }
另外我自己做了一点修改:
在实际用的时候,键盘消失原来的控件并没有回归都原来的位置,而是上移了20个像素,我估计是因为顶部Bar的原因,只要将22行代码改成如下就可以了:
CGRect
rect = CGRectMake(0.0f, 20.0f, self.view.frame.size.width,
self.view.frame.size.height);
时间: 2024-12-14 18:10:03