zoukankan      html  css  js  c++  java
  • 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);  

  • 相关阅读:
    MySQL 数据类型
    MySQL的相关概念介绍
    遍历Map的四种方法
    Hadoop在win7下部署的问题
    Hbase之shell操作
    问题-"Record not found or changed by another user"
    问题-Delphi编译到最后Linking时总是出现与ntdll.dll有关的错误还有Fatal Error Out of memory错误
    教程-CXGRID之cxDropDownEdit密密
    问题-delphi在某电脑(win7)上是界面超乱 DPL
    教程-Delphi调用C# WEBSERVICE(二)
  • 原文地址:https://www.cnblogs.com/dongweiq/p/3746238.html
Copyright © 2011-2022 走看看