首页 > 代码库 > UITextField控件处理键盘弹出时遮住输入框的问题

UITextField控件处理键盘弹出时遮住输入框的问题

 

原文连接: 
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);