`

对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

相关推荐

    UITextField

    除了上述方法,我们还可以使用Auto Layout来处理键盘遮挡问题。为`UITextField`设置约束,使其底部距离父视图的安全区域有一定的间距,这样当键盘弹出时,布局系统会自动调整`UITextField`的位置。 总之,通过监听`...

    iOS自带回收键盘的UITextField

    2. **键盘管理**:学习如何使用`UITextField`的代理方法(如`textFieldShouldReturn:`)或UIKeyboardNotifications来监听并控制键盘的显示和隐藏。 3. **自定义工具栏**:理解如何使用`UIInputView`或`UIToolbar`...

    UITextfield

    遵循这个协议的类可以接收到`UITextField`的各种事件,如文本改变(`textField:shouldChangeCharactersIn:replacementString:`)、文本结束编辑(`textFieldDidEndEditing:`)等,这使得我们可以对用户输入进行验证或...

    ios7隐藏虚拟键盘,解决键盘挡住UITextField问题

    通过以上策略,开发者可以根据项目需求选择合适的方法来处理iOS 7中的键盘遮挡问题。在实际应用中,可能会结合使用多种方法,以提供最佳用户体验。在提供的KayBoardDemo项目中,可能包含了实现这些解决方案的示例...

    UITextField+BlockDemo

    `UITextField+BlockDemo` 是一个示例项目,它展示了如何通过扩展`UITextField` 类并使用Blocks(block语法)来增强其功能,使得在处理用户输入事件时更加灵活便捷。这个项目的核心就是将传统的Delegate模式与Blocks...

    UITextView 实现UITextField功能

    然而,在某些场景下,开发者可能希望`UITextView`具备`UITextField`的一些特性,比如,限制输入字符数、设置 placeholder 或者实现简单的键盘返回事件处理。本篇文章将详细探讨如何通过自定义`UITextView`来实现`...

    ios-键盘不覆盖UITextField和UITextView输入框.zip

    通过上述方法,我们可以创建一个名为“完美Demo”的应用示例,它演示了如何优雅地处理键盘弹出时输入框被遮挡的问题。这个zip文件中的代码应该包含了实现这些功能的完整示例,开发者可以参考学习并根据自己的项目...

    UITextField Demo实例

    2. **事件处理**:`UITextField`提供了诸如`textFieldDidBeginEditing:`、`textFieldDidEndEditing:`、`textField:shouldChangeCharactersInRange:replacementString:`等代理方法,可以通过实现这些方法来监听用户...

    UITextField 文本字段控件-IOS开发

    例如,可以使用`textFieldShouldReturn(_:)`方法处理回车键事件,通常用于提交表单。 在实际项目中,我们常常需要对用户输入的数据进行验证,比如限制输入长度、格式校验等。这些都可以通过代理方法或者自定义扩展...

    swift-KeyBoard-Swift使用Swift编写的字母和数字键键盘可以用于UITextField和UITextView

    3. 键盘的隐藏和显示:用户可能需要随时隐藏和显示键盘,这可以通过调用UITextField或UITextView的resignFirstResponder()和becomeFirstResponder()方法实现。 4. 自定义键盘的动画效果:为了提高用户体验,可以...

    UITextField代理事件_类似QQ登陆窗口的简单实现

    这个教程将重点讲解如何利用`UITextField`的代理方法来实现一个类似QQ登录窗口的功能,包括显示暗文(隐藏密码)以及添加删除小叉号。 首先,我们需要了解`UITextField`的代理协议`UITextFieldDelegate`。这个协议...

    swift-IB方式配置UITextField组件输入规则格式验证长度跳转顺序

    在实际项目中,我们可能还需要处理更多细节,例如错误提示、输入监听、自定义键盘等。对于复杂的验证逻辑,可以创建一个专门的验证类,将验证规则封装其中,以提高代码复用性和可维护性。 在提供的`...

    iphone 开发基础控件UITextField

    `UITextField`提供了`becomeFirstResponder`和`resignFirstResponder`方法,分别用于使`UITextField`获取和失去焦点,从而显示和隐藏键盘。`textFieldShouldReturn`代理方法会在用户点击键盘上的“return”键时触发...

    UItextField和UItextView自动移动

    2. **处理键盘显示通知**:当接收到`UIKeyboardWillShowNotification`通知时,我们需要获取键盘的高度以及动画的持续时间。这些信息在通知的`userInfo`字典中,键为`UIKeyboardFrameEndUserInfoKey`和`...

    UITextfieldresignFirstResponder键盘不回收

    总的来说,解决`UITextField resignFirstResponder`键盘不回收的问题,需要对事件处理、控制器生命周期以及可能的自定义手势冲突进行排查。同时,利用自定义类别来封装键盘隐藏操作也是一个很好的实践,可以提高代码...

    类似登录的UITextField

    可以对第二个`UITextField`进行特殊设置,如隐藏输入的字符: ```swift let passwordTextField = UITextField(frame: CGRect(x: 20, y: 150, width: 200, height: 30)) passwordTextField.borderStyle = .rounded...

    UITableview处理键盘遮挡

    然而,在实际应用中,我们经常会遇到一个问题:当用户在`UITableView`中的输入框(如UITextField)中输入时,弹出的键盘可能会遮挡住部分或全部表格内容,这无疑会给用户体验带来困扰。针对“`UITableView`处理键盘...

    UItextfield详解

    `UITextField`是iOS应用开发中不可或缺的一个控件,主要用于接收用户输入文本。它在Objective-C(OC)和Swift这两种苹果的编程语言中都有广泛的应用。...通过实际项目练习,你会对`UITextField`有更深入的理解。

    弹出键盘,监听键盘高度

    - 可以通过`NotificationCenter.default.addObserver(forName:object:queue:using:)`方法订阅键盘的通知,然后在回调中处理键盘的显示和隐藏事件。 4. **键盘高度计算**: - 在键盘通知的回调中,可以从`...

    UITextField用法

    对于初学者或者对iOS基础知识掌握不够牢固的开发者来说,理解并熟练运用`UITextField`是必不可少的技能。在这个主题中,我们将深入探讨`UITextField`的基本用法、属性、方法以及如何在实际项目中有效地运用它。 ...

Global site tag (gtag.js) - Google Analytics