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

你可能感兴趣的:(UITextView,UITextField,UISearchBar,键盘遮挡)