UITextField被键盘遮挡问题解决方法

来源:互联网 发布:汽车改装模拟器软件 编辑:程序博客网 时间:2024/05/29 10:38
文连接: 
http://www.devdiv.com/thread-70159-1-1.html 

实现以下三个方法,如果弹出的键盘会遮住输入框 ,整体的界面会向上移动,这样就不会遮住输入框了。自己增加UITextFieldDelegate委托。 
只适合iPhone,如果想要支持iPad,只要把216改成iPad上面键盘的高度即可。 
C代码  收藏代码
  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. }  

以下转自   http://janedoneway.iteye.com/blog/1575250

另外我自己做了一点修改: 
在实际用的时候,键盘消失原来的控件并没有回归都原来的位置,而是上移了20个像素,我估计是因为顶部Bar的原因,只要将22行代码改成如下就可以了: 
CGRect rect = CGRectMake(0.0f, 20.0f, self.view.frame.size.width, self.view.frame.size.height);