zoukankan      html  css  js  c++  java
  • <转>对UITextField的键盘处理方法

    http://blog.csdn.ofcdn.net/ch_soft/article/details/6948119

    1. - (void)registerForKeyboardNotifications  
    2. {  
    3.     //添加自己做为观察者,以获取键盘显示时的通知  
    4.     [[NSNotificationCenter defaultCenter] addObserver:self  
    5.                                              selector:@selector(keyboardWasShown:)  
    6.                                                  name:UIKeyboardDidShowNotification object:nil];  
    7.     //添加自己做为观察者,以获取键盘隐藏时的通知  
    8.     [[NSNotificationCenter defaultCenter] addObserver:self  
    9.                                              selector:@selector(keyboardWasHidden:)  
    10.                                                  name:UIKeyboardDidHideNotification object:nil];  
    11. }  
    12.   
    13. // 键盘出现时调用此方法  
    14. - (void)keyboardWasShown:(NSNotification*)aNotification  
    15. {  
    16.     //如果键盘是显示状态,不用做重复的操作  
    17.     if (keyboardShown)  
    18.         return;  
    19.       
    20.     //获得键盘通知的用户信息字典  
    21.     NSDictionary* info = [aNotification userInfo];  
    22.       
    23.     // 取得键盘尺寸.  
    24.     NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];  
    25.     CGSize keyboardSize = [aValue CGRectValue].size;  
    26.       
    27.     // 重新设置scrollView的size  
    28.     CGRect viewFrame = [myScrollView frame];  
    29.     viewFrame.size.height -keyboardSize.height;  
    30.     myScrollView.frame = viewFrame;  
    31.       
    32.       
    33.     // 把当前被挡住的text field滚动到view中适当的可见位置.  
    34.     CGRect textFieldRect = [activeField frame];  
    35.     [myScrollView scrollRectToVisible:textFieldRect animated:YES];  
    36.       
    37.       
    38.     //记录当前textField的偏移量,方便隐藏键盘时,恢复textField到原来位置  
    39.     oldContentOffsetValue = [myScrollView contentOffset].y;  
    40.       
    41.     //计算textField滚动到的适当位置  
    42.     CGFloat value = (activeField.frame.origin.y+myScrollView.frame.origin.y+activeField.frame.size.height - self.view.frame.size.height + keyboardSize.height)+2.0f;  
    43.       
    44.     //value>0则表示需要滚动,小于0表示当前textField没有被挡住,不需要滚动  
    45.     if (value > 0) {  
    46.         //使textField滚动到适当位置  
    47.         [myScrollView setContentOffset:CGPointMake(0, value) animated:YES];  
    48.         isNeedSetOffset = YES;//更改状态标志为需要滚动  
    49.     }  
    50.   
    51.     //更改键盘状态标志为已显示  
    52.     keyboardShown = YES;  
    53. }  
    54.   
    55.   
    56. // 键盘隐藏时调用此方法  
    57. - (void)keyboardWasHidden:(NSNotification*)aNotification  
    58. {  
    59.   
    60.       
    61.     NSDictionary* info = [aNotification userInfo];  
    62.       
    63.     // Get the size of the keyboard.  
    64.     NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];  
    65.     CGSize keyboardSize = [aValue CGRectValue].size;  
    66.       
    67.     // Reset the height of the scroll view to its original value  
    68.     CGRect viewFrame = [myScrollView frame];  
    69.     viewFrame.size.height += keyboardSize.height;  
    70.     myScrollView.frame = viewFrame;  
    71.       
    72.     //如果状态标志为需要滚动,则要执行textFiled复位操作  
    73.     if (isNeedSetOffset) {  
    74.         //oldContentOffsetValue记录了textField原来的位置,复位即可  
    75.         [myScrollView setContentOffset:CGPointMake(0, oldContentOffsetValue) animated:YES];  
    76.     }  
    77.   
    78.     //复位状态标志  
    79.     isNeedSetOffset = NO;  
    80.     keyboardShown = NO;  
    81. }  
  • 相关阅读:
    js遍历多层对象的键值对
    JS HEX十六进制与RGB, HSL颜色的相互转换【转】
    TortoiseSVN打分支、合并分支、切换分支【转】
    grid.containLabel
    安装谷歌vue-devtools调试插件
    使用Echarts遇到的问题
    理解js编程中函数的副作用
    git 镜像下载和安装
    欢迎来到博客园的世界
    c#制作一个屏幕保护程序
  • 原文地址:https://www.cnblogs.com/bucengyongyou/p/2697409.html
Copyright © 2011-2022 走看看