`

对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. }  
分享到:
评论
1 楼 w11h22j33 2012-01-13  
 UIScrollView使用大全
http://blog.csdn.ofcdn.net/ch_soft/article/details/6947695

相关推荐

    解决iOS7上UITextField限制字数输入导致崩溃问题的方法

    但对于系统键盘,联想状态下的输入也会监听,这里如果不处理就容易发生崩溃,例如当快要达到字数限制时,继续输入,此时textField.text =联想输入文字+textField已有文字,当textField.text超过字数限制时,就会截取...

    FuckKeyboard:交易他妈的键盘

    在 AutoLayout 布局下处理键盘挡住视图问题很简短的一篇文章,记录一个在实习期间 Get 的机智方案,制作一个登录界面的时候遇到这样一个问题,当把 UITextField 放在下面的时候,弹出的键盘会挡住该 UITextField ...

    键盘弹出时会覆盖文本框怎么解决

    在一些网站登陆界面,我们经常会见到,键盘的出现与隐藏操作,那么基于代码是如何实现的呢?下面小编写了具体代码介绍,特此分享到软件开发网平台,供大家参考 先给大家展示下效果图: 具体代码如下所示: #...

    防止键盘遮挡控件滚动

    我开发了UIAutoScrollView类,它能自动处理键盘遮挡问题,达到了一劳永逸的效果! 使用注意 1.如果是xib的方式使用这个类,不需要调用这个addAutoScrollAbility方法,我在awakeFromNib方法里调用了。 在xib中使用...

    自动管理输入控件键盘遮挡问题(iPhone源代码)

    来源:github/UIAutoScrollViewLicence:MIT作者:lq  在开发过程中,如一个页面有许多的输入控件,UITextField和UITextView。... 我开发了UIAutoScrollView类,它能自动处理键盘遮挡问题,达到了一劳永逸的效果!

    ABTextboxToolbarHandler:ABTextboxToolbarHandler 用于 UItextFieldUITextView 上一个,下一个辅助视图

    当表单有更多的 UITextField 或 UITextView 对象时,我们面临一个常见问题 - 键盘重叠字段! 此代码为该问题提供了非常简单的解决方案。 ABTextboxToolbarHandler是简单易用的解决方案,您可以在其中处理输入文本...

    CustomKeyboard:可定制的默认 iOS 键盘

    它负责处理所有必需的框架和第三方依赖项: pod 'DCustomKeyboard' , '~> 0.0'使用示例要将键盘添加到UITextView或UITextField使用下一个代码DCustomGridKeyboard *keyboard = [[DCustomGridKeyboard alloc ] ...

    list-of-thaana-tools:社区维护的插件,库和程序列表,以帮助构建Thaana兼容软件

    使在Android上使用Thaana更加容易字型开放字体 规格 Java脚本将键输入转换为适当的Unicode Thaana字符的Brkeyboard处理程序Thaana音译为拉丁文构架AngularJS 将键盘输入替换为Thaana Unicode -Thaana键盘处理程序...

    ios开发记录

    //resignFirstResponder 这个方法的功能就是让属于textfield的键盘下去 [_textField resignFirstResponder]; resign失去 responder响应 //成为第一响应者 [_textField becomeFirstResponder]; become 变成 //...

    iPhone开发秘籍

    8.6 秘诀:关闭uitextfield键盘 204 8.7 秘诀:关闭uitextview键盘 205 8.8 秘诀:向文本视图添加一个撤销(undo)按钮 207 8.9 秘诀:创建一个基于文本视图的html编辑器 209 8.10 秘诀:构建一个交互搜索栏 211...

    ScrollKeyboardController

    滚动键盘控制器 在 iOS 上处理键盘显示/隐藏的框架。 轻松允许您滚动到 UITextFields 和 UITextViews,以便它们不会被键盘覆盖。指示将您的 UITextFields 和 UITextViews 放在滚动视图中。 将 SKCKeyboardController...

    iPhone开发秘籍.part2.rar

    8.6 秘诀:关闭UITextField 键盘.....204 8.7 秘诀:关闭UITextView 键盘.....205 8.8 秘诀:向文本视图添加一个撤销 (Undo)按钮.....207 8.9 秘诀:创建一个基于文本视图的HTML 编辑器.....209 8.10 秘诀:构建一...

    iPhone开发秘籍.part4.rar

    8.6 秘诀:关闭UITextField 键盘.....204 8.7 秘诀:关闭UITextView 键盘.....205 8.8 秘诀:向文本视图添加一个撤销 (Undo)按钮.....207 8.9 秘诀:创建一个基于文本视图的HTML 编辑器.....209 8.10 秘诀:构建一...

    iPhone开发秘籍.part1.rar

    8.6 秘诀:关闭UITextField 键盘.....204 8.7 秘诀:关闭UITextView 键盘.....205 8.8 秘诀:向文本视图添加一个撤销 (Undo)按钮.....207 8.9 秘诀:创建一个基于文本视图的HTML 编辑器.....209 8.10 秘诀:构建一...

Global site tag (gtag.js) - Google Analytics