• iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项


    原文连接:http://guohuaden.com/2017/04/30/get-keyboard-height/

    我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框。

    但实现时你会发现,在不同的手机上键盘的高度是不同的。这里列举一下:

    //获取键盘的高度
        /*
         iphone 6:
         中文
         2014-12-31 11:16:23.643 Demo[686:41289] 键盘高度是  258
         2014-12-31 11:16:23.644 Demo[686:41289] 键盘宽度是  375
         英文
         2014-12-31 11:55:21.417 Demo[1102:58972] 键盘高度是  216
         2014-12-31 11:55:21.417 Demo[1102:58972] 键盘宽度是  375
         
         iphone  6 plus:
         英文:
         2014-12-31 11:31:14.669 Demo[928:50593] 键盘高度是  226
         2014-12-31 11:31:14.669 Demo[928:50593] 键盘宽度是  414
         中文:
         2015-01-07 09:22:49.438 Demo[622:14908] 键盘高度是  271
         2015-01-07 09:22:49.439 Demo[622:14908] 键盘宽度是  414
         
         iPhone 7
         2016-11-13 17:44:48.315 LoginDemo[2431:120937] 键盘高度是  258
         2016-11-13 17:44:48.316 LoginDemo[2431:120937] 键盘宽度是  375
         
         iPhone 7 Plus
         2016-11-13 17:43:20.683 LoginDemo[2322:119257] 键盘高度是  271
         2016-11-13 17:43:20.683 LoginDemo[2322:119257] 键盘宽度是  414
         
         iphone 5 :
         2014-12-31 11:19:36.452 Demo[755:43233] 键盘高度是  216
         2014-12-31 11:19:36.452 Demo[755:43233] 键盘宽度是  320
         
         ipad Air:
         2014-12-31 11:28:32.178 Demo[851:48085] 键盘高度是  264
         2014-12-31 11:28:32.178 Demo[851:48085] 键盘宽度是  768
         
         ipad2 :
         2014-12-31 11:33:57.258 Demo[1014:53043] 键盘高度是  264
         2014-12-31 11:33:57.258 Demo[1014:53043] 键盘宽度是  768
         */

     我们看出不同的手机设备键盘的高度是不同的,而且英文和中文键盘的高度也是不一样的。

     下面我们说一下利用通知来获取键盘的高度:

    //增加监听,当键盘出现或改变时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(keyboardWillShow:)
                                          name:UIKeyboardWillShowNotification
                                          object:nil];
     
    //增加监听,当键退出时收出消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(keyboardWillHide:)
                                          name:UIKeyboardWillHideNotification
                                          object:nil];

     

     显示键盘的代码:

    - (void)keyboardWillShow:(NSNotification *)aNotification
    {
        //获取键盘的高度
        NSDictionary *userInfo = [aNotification userInfo];
        NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
        CGRect keyboardRect = [aValue CGRectValue];
        int height = keyboardRect.size.height;
        int width = keyboardRect.size.width;
        NSLog(@"键盘高度是  %d",height);
        NSLog(@"键盘宽度是  %d",width);
    }

     

    隐藏键盘的高度:

    //当键盘隐藏的时候
    - (void)keyboardWillBeHidden:(NSNotification*)aNotification
    {
         //do something
    }

     

     当然在注册通知(NSNotificationCenter)后,记得最后的注销通知:

    -(void)viewWillDisappear:(BOOL)animated
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }

     

     

    注意⚠️:切换键盘时也会产生UIKeyboardWillShowNotification,所以很可能方法被调用多次。最好在keyboardWillShow中不要写与调用次数有关的代码。在键盘第一次产生时,如果不是默认的英文键盘也会调用多次方法。

     比如:

    #pragma mark -  ******************打开键盘********
    - (void) keyboardWillShowOfFeedBackVC:(NSNotification *)notify {
        
        //这样写是不正确的:因为切换中英文键盘时都会调用该方法。
    //    CGRect frame = self.view.frame;
    //    frame.origin.y = self.view.frame.origin.y - 64;
    //    self.view.frame = frame;
        
        self.view.frame = CGRectMake(0, -40, IPHONE_WIDTH, IPHONE_HEIGHT);
    
    }

     

  • 相关阅读:
    Trie字典树
    NET Web API和Web API Client Gen使Angular 2应用程序
    MyBatis实体属性与表的字段不对应的解决方案
    携程Apollo(阿波罗)配置中心使用Google代码风格文件(在Eclipse使用Google代码风格)(配合阿里巴巴代码规约快速设置)
    Spring Boot实现多个数据源教程收集(待实践)
    携程Apollo(阿波罗)配置中心用户管理和部门管理
    Spring Boot多数据源连接8小时后断开的问题解决(MySQL)
    携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发
    携程Apollo(阿波罗)配置中心把现有项目的配置文件迁移到Apollo
    携程Apollo(阿波罗)配置中心在Spring Boot项目快速集成
  • 原文地址:https://www.cnblogs.com/LQCQ-Silent/p/6059411.html
Copyright © 2020-2023  润新知