键盘遮挡输入框(textField)

2017-04-07  本文已影响0人  敲代码的宝哥哥

在我们开发中,经常会遇到键盘遮挡着输入框的情况,那么我们怎么去解决呢,如果动态的调整输入框,使其显示出来不被遮挡。

我们主要的思路是,如果键盘遮挡了输入框,那么就像整个页面向上移动一定的距离,使其显现出来。

什么时候页面才会向上移动,当

textfield的距离屏幕的最大Y值 + 键盘的高度 > 屏幕的高度

就需要上移了。上移的高度就是

textfield的距离屏幕最大Y值 + 键盘的高度 — 屏幕的高度

现在,我们利用通知得到键盘的高度,首先我们认识一些通知

//键盘将要出现

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

//键盘已经出现

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

//键盘将要消失

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

//键盘已经消失

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];

//键盘的frame将要改变

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

//键盘的frame改变完毕

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];

当键盘出现、消失或者改变frame的时候,都会触发通知

我们主要是利用键盘已经出现进行屏幕上移 和 键盘已经消失进行屏幕还原。(当然你也可以利用键盘将要出线和将要消失进行屏幕的移动)

键盘高度我们可以在通知方法中,利用

- (void)keyboardDidShow:(NSNotification *)info {

//获取键盘高度,

CGFloat kbHeight = [[info.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;

NSLog(@"键盘高度 %f",kbHeight);

}

获得。

最后别忘了在界面消失的时候移除观察者

//键盘将要出现

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

//键盘已经出现

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];

//键盘将要消失

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

//键盘已经消失

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];

//键盘的frame将要改变

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];

//键盘的frame改变完毕

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidChangeFrameNotification object:nil];

效果如下

这里只是说了一下思路,具体的代码见下方。里面有详细的备注

Demo代码地址:https://github.com/312179361/KeyBoardManager.git

联系方式:QQ:3020495503

有建议和意见的欢迎骚扰,共同交流。请备注,“我在简书上看到你的博客,一起交流吧”。


上一篇下一篇

猜你喜欢

热点阅读