UITextField,UITextView,UISearchBar如何实现键盘的自动隐藏以及遮挡时自动上移的功能?
众所周知,iOS下实现文字的输入都会在界面上布局UITextField或者UITextView或者UISearchBar这三种控件。这三种输入控件在变为第一响应者(BecomeFirstResponder)时会弹出键盘窗口,而当控件失去第一响应者(ResignFirstResponder)时则键盘窗口会隐藏。在实际编程时我们需要编码来控制输入框何时需要失去第一响应者,比如在用户按下了键盘的return按键或者按下了Done按键,或者用户按下了一个提交按钮,或者用户在空白处执行了触摸操作等。要完成上述的任何一种效果,我们都需要在程序的对应的事件里面添加输入控件的resignFirstResponder方法的调用,如果界面里面有多个输入控件时则处理起来更加麻烦。
在使用输入控件时,因为键盘窗口的弹出可能会导致界面底部的视图包括输入控件本身被键盘窗口遮挡,为了不影响用户使用程序的体验,我们还需要编程来处理视图的移动问题,当界面被键盘窗口挡住时我们需要编程让被遮挡的部分视图往上移动,而当键盘窗口隐藏时则需要将上移的视图恢复原状。当某个界面有多个输入控件时我们还可能需要切换不同的输入控件时,所移动幅度不同。
为了解决上述两个问题,我们可以通过重载UITextField,UITextView,UISearchBar三个类的派生类,并加入特殊的代码来解决问题;我们也可以在键盘窗口中增加一个ToolBar并在里面增加上一项,下一项,取消等按钮来解决焦点的切换和键盘的隐藏等功能;我们也可以在每个具有输入控件中的视图控制器中添加代码来解决问题。这三种方法的实现各有千秋,而且网络上也具有了很多优秀的开源项目来解决这个问题。但是这些解决方法唯一的问题就是或多或少的需要在程序中编写附加的代码,而且有一些还有学习成本。
但是这些问题都是可以解决的,请访问使用https://github.com/youngsoft/YSTextInputKeyboardCategory中的机制,您只需要将其中的UIView+YSTextInputKeyboard.h和UIView+YSTextInputKeyboard.h复制到您的工程即可,然后您所有的UITextField,UITextView,UISearchBar就有了自动的键盘隐藏和遮挡时的自动移动能力了!要隐藏键盘时只要您在空白处单击触摸或者执行向下滑动手势,键盘就自动隐藏,而且当某个界面底部的输入控件变为第一个响应者时系统自动会将试图往上移动,而当失去第一响应者时又会自动往下移动。
当然如果系统默认的功能不能满足您的要求,您也可以自定义当遮挡时哪个视图移动,以及移动的偏移值是多少。这个输入控件实现原理其实也是利用了object-c的runtime机制和手势来实现的。我们可以通过使用UIView的扩展分类里面的扩展属性kbMoving来设置当键盘遮挡时需要移动的视图,以及移动的偏移量。我们也可以为某些其他的需要支持inputView的控件提供了集成的方法。具体请见github中的demo.
https://github.com/youngsoft/YSTextInputKeyboardCategory
在使用输入控件时,因为键盘窗口的弹出可能会导致界面底部的视图包括输入控件本身被键盘窗口遮挡,为了不影响用户使用程序的体验,我们还需要编程来处理视图的移动问题,当界面被键盘窗口挡住时我们需要编程让被遮挡的部分视图往上移动,而当键盘窗口隐藏时则需要将上移的视图恢复原状。当某个界面有多个输入控件时我们还可能需要切换不同的输入控件时,所移动幅度不同。
为了解决上述两个问题,我们可以通过重载UITextField,UITextView,UISearchBar三个类的派生类,并加入特殊的代码来解决问题;我们也可以在键盘窗口中增加一个ToolBar并在里面增加上一项,下一项,取消等按钮来解决焦点的切换和键盘的隐藏等功能;我们也可以在每个具有输入控件中的视图控制器中添加代码来解决问题。这三种方法的实现各有千秋,而且网络上也具有了很多优秀的开源项目来解决这个问题。但是这些解决方法唯一的问题就是或多或少的需要在程序中编写附加的代码,而且有一些还有学习成本。
但是这些问题都是可以解决的,请访问使用https://github.com/youngsoft/YSTextInputKeyboardCategory中的机制,您只需要将其中的UIView+YSTextInputKeyboard.h和UIView+YSTextInputKeyboard.h复制到您的工程即可,然后您所有的UITextField,UITextView,UISearchBar就有了自动的键盘隐藏和遮挡时的自动移动能力了!要隐藏键盘时只要您在空白处单击触摸或者执行向下滑动手势,键盘就自动隐藏,而且当某个界面底部的输入控件变为第一个响应者时系统自动会将试图往上移动,而当失去第一响应者时又会自动往下移动。
当然如果系统默认的功能不能满足您的要求,您也可以自定义当遮挡时哪个视图移动,以及移动的偏移值是多少。这个输入控件实现原理其实也是利用了object-c的runtime机制和手势来实现的。我们可以通过使用UIView的扩展分类里面的扩展属性kbMoving来设置当键盘遮挡时需要移动的视图,以及移动的偏移量。我们也可以为某些其他的需要支持inputView的控件提供了集成的方法。具体请见github中的demo.
https://github.com/youngsoft/YSTextInputKeyboardCategory
...全文
相关推荐
iOS关闭虚拟键盘方法汇总
在iOS应用开发中,有三类视图对象会打开虚拟键盘,进行输入操作,但如何关闭虚拟键盘,却没有提供自动化的方法。这个需要我们自己去实现。这三类视图对象分别是UITextField,UITextView和UISearchBar。 这里介绍一下UITextField中关闭虚拟键盘的几种方法。 第一种方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:来关闭虚拟键盘。 在UITextField视图对象如birdNameInput所在的类中实现这个方法。 (BOOL)textFieldShouldReturn:(UITextField *)tex
iOS键盘如何添加隐藏键盘功能
主要为大家详细介绍了iOS键盘如何添加隐藏键盘功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
swift-iOS界面刷新时保持UITextFieldUITextViewUISearchBar响应
iOS 界面刷新时 保持UITextField UITextView UISearchBar 响应,保持键盘一直打开,并可在刷新后指定定位到某输入框作为第一响应者
联系人应用
联系人应用
UIKit_Framework.pdf
UIKit_Framework.pdf,UIkit框架,方便查找各个类的接口!


