美文网首页
键盘遮挡输入框(textField)

键盘遮挡输入框(textField)

作者: 敲代码的宝哥哥 | 来源:发表于2017-04-07 18:27 被阅读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

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


    相关文章

      网友评论

          本文标题:键盘遮挡输入框(textField)

          本文链接:https://www.haomeiwen.com/subject/jlihattx.html