`
风尘哥哥
  • 浏览: 3350 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

对UITextField的键盘处理方法<摘抄>

iSO 
阅读更多
  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. }  
分享到:
评论

相关推荐

    iOS虚拟键盘上添加动态按钮

    5. 使用自定义键盘:在需要的文本字段(UITextField或UITextView)中,设置输入视图控制器为自定义键盘。 ```swift textField.inputViewController = storyboard?.instantiateViewController(withIdentifier: ...

    iOS自定义键盘

    通过这些方法,我们可以监听用户的触摸事件,并根据需要显示和处理自定义的键盘视图。例如,我们可以创建一个UIView子类作为键盘,然后在触摸事件中更新其显示内容和行为。 ```swift class CustomKeyboardView: ...

    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...

    UITextField现在输入字符长度

    此外,`UITextField`还有一个`delegate`属性,可以设置为遵循`UITextFieldDelegate`协议的类实例,通过实现其协议方法来监听并处理用户输入的各种事件。 描述中提到的“bug”可能是由于在限制字符长度时,没有正确...

    2WayBindingUIKit:演示如何使用Combine框架在UIKit中创建双向绑定

    UIKit中的2向绑定 演示如何使用Combine框架在UIKit中创建双向绑定 为了生成大多数UIControl...UITextField具有textPublisher() -&gt; AnyPublisher &lt;String&gt; UIButton有一个tapPublisher() -&gt; AnyPublisher &lt;Void&gt;

    非输入区键盘消失的方法

    override func touchesBegan(_ touches: Set&lt;UITouch&gt;, with event: UIEvent?) { super.touchesBegan(touches, with: event) view.endEditing(true) } ``` 这个方法会在视图接收到触摸事件时被调用,进而调用`...

    UITextView 实现UITextField功能

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

    swift-一个UITextField类的category可以一行代码实现对UITextField字数的限制

    总结来说,这个Swift开发中的Category实践,通过扩展UITextField,实现了对文本输入字数的智能管理,使得开发者在处理用户输入时能更方便地控制数据格式,提高了用户体验。这种利用Swift扩展功能优化已有类的方法,...

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

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

    代码实现Lable 、textField创建界面以及键盘的处理

    override func touchesBegan(_ touches: Set&lt;UITouch&gt;, with event: UIEvent?) { view.endEditing(true) // 隐藏当前视图内所有输入框的键盘 } ``` 通过以上步骤,我们便能用代码实现一个简单的包含Label和...

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

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

    UITextField Demo实例

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

    UITextField扩展

    本文档提供了一套对 `UITextField` 的扩展方法,这些方法可以帮助开发者更方便地创建和自定义文本框。 #### 文件结构 文档包含了两个部分:`.h` 头文件和 `.m` 实现文件。 1. **UITextField+Jex.h**:头文件声明...

    UITextField 文本字段控件-IOS开发

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

    iOS为文本框定制二级键盘

    2. 实现UIKeyboardProtocol协议,这个协议包含两个方法:`- (CGRect)rectForKey:(id&lt;UIKey&gt;)key`和`- (NSArray&lt;id&lt;UIKey&gt;&gt; *)keysForRect:(CGRect)rect`。这两个方法用于告诉系统自定义键盘的布局,以便于计算触摸...

Global site tag (gtag.js) - Google Analytics