最近频繁对键盘的遮挡问题进行处理,相信所有人都会频繁的与键盘打交道。于是我在这里把相关的一些操作进行了封装,多少能减少一些代码量。
先放上Github地址:https://github.com/superxlx/KeyBoardDemo
从Github上下载以后你可以找到两个文件XKeyBoard.h和XKeyBoard.m,这两个文件就是我封装后的文件,将这两个文件拖入你的工程。在需要对键盘监听的controller的文件进行一下操作:
引入头文件
#import "XKeyBoard.h"
继承协议KeyBoardDlegate,这个协议需要实现两个方法:
<pre><code>
/ - (void)keyboardWillShowNotification:(NSNotification *)notification;
/ - (void)keyboardWillHideNotification:(NSNotification *)notification;
</code></pre>
这两个方法将分别在键盘出现和消失的时候调用,但是目前为止你还需要做最后一步:
在viewdidload方法中加入以下代码
<pre><code>
[XKeyBoard registerKeyBoardShow:self];
[XKeyBoard registerKeyBoardHide:self];
</code></pre>
上面的两行代码分别对键盘的出现和消失监听进行了注册。
好的现在运行你的程序吧,在键盘出现和消失的时候是不是调用了 相关方法。
XKayBoard还提供了一些其他的有关键盘的属性:
<pre><code>
/**
- 注册键盘出现
- @param target 目标(self)
*/
- (void)registerKeyBoardShow:(id)target;
/**
- 注册键盘隐藏
- @param target 目标(self)
*/
- (void)registerKeyBoardHide:(id)target;
/**
- @return 返回键盘,包括高度、宽度
*/
- (CGRect)returnKeyBoardWindow:(NSNotification )notification;
/*
- @return 返回键盘上拉动画持续时间
*/
- (double)returnKeyBoardDuration:(NSNotification )notification;
/*
- @return 返回键盘上拉,下拉动画曲线
*/
- (UIViewAnimationCurve)returnKeyBoardAnimationCurve:(NSNotification *)notification;
</code></pre>
利用以上属性就可以在键盘出现和消失所调用的函数中进行相关操作,比如我是这样做的:
<pre><code>
-
(void)keyboardWillShowNotification:(NSNotification *)notification
{CGRect keyboardEndFrameWindow = [XKeyBoard returnKeyBoardWindow:notification];
double keyboardTransitionDuration = [XKeyBoard returnKeyBoardDuration:notification];
UIViewAnimationCurve keyboardTransitionAnimationCurve = [XKeyBoard returnKeyBoardAnimationCurve:notification];
[UIView animateWithDuration:keyboardTransitionDuration
delay:0
options:(UIViewAnimationOptions)keyboardTransitionAnimationCurve << 16
animations:^{
CGFloat y =self.view.bounds.size.height - 50;
CGRect frame = CGRectMake(0, y, 320, 50);
frame.origin.y -= keyboardEndFrameWindow.size.height;
self.testview.frame = frame;
} completion:nil];
}
-
(void)keyboardWillHideNotification:(NSNotification *)notification
{
CGRect keyboardEndFrameWindow = [XKeyBoard returnKeyBoardWindow:notification];double keyboardTransitionDuration = [XKeyBoard returnKeyBoardDuration:notification];
UIViewAnimationCurve keyboardTransitionAnimationCurve = [XKeyBoard returnKeyBoardAnimationCurve:notification];
[UIView animateWithDuration:keyboardTransitionDuration
delay:0
options:(UIViewAnimationOptions)keyboardTransitionAnimationCurve << 16
animations:^{
CGPoint cen = self.testview.center;
cen.y += keyboardEndFrameWindow.size.height;
self.testview.center = cen;} completion:nil];
}
</code></pre>
我利用XKeyBoard使键盘出现的时候最下方的UIView上移,消失的时候这个UIView有挪回屏幕的最下方,这样的做法通常在QQ的说说评论之类的功能等地方会用到。
这的确是一个小巧的工具,但也确实在一些情况下 节省了我们一些时间。
如果觉得有用的话,可以在Github上点击一下Star哦,同时关注本人。