文档章节

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

青卷三部
 青卷三部
发布于 2016/11/13 18:19
字数 731
阅读 75
收藏 0

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

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

//获取键盘的高度
    /*
     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);

}

© 著作权归作者所有

共有 人打赏支持
青卷三部
粉丝 0
博文 8
码字总数 8364
作品 0
浦东
iOS工程师
键盘通知keyboard,获取键盘高度进行操作

iOS博主造了个轮子,引入.h就可以自动偏移view,防止界面被键盘遮挡 -------------------分割线------------------- 博客更新,使用新的方法 [[NSNotificationCenter defaultCenter] addObserve...

iShown
2016/02/26
0
0
fixed定位元素被安卓、ios键盘顶起的解决办法

问题背景: 当我们在写H5页面时经常会有fixed固定位置的元素存在,例如下图左中的"作业帮一课APP下载框",当我们input输入的时候键盘会弹起并将fixed定位的下载框顶起,如下图右,ios和安卓部分机...

JamesView
07/07
0
0
iO6 Programming pushing the limits 阅读笔记

目录 第一部分 iOS6新内容 第二部分 从每天工具中获取更多(介绍日常使用控件和框架的潜力) 第三部分 完成任务的正确工具(介绍不是那么常用的控件和框架) 第四部分 发挥到极限(深入理解i...

云飞扬v5
2015/11/09
0
0
Xamarin iOS教程之键盘的使用和设置

Xamarin iOS教程之键盘的使用和设置 Xamarin iOS使用键盘 在文本框和文本视图中可以看到,当用户在触摸这些视图后,就会弹出键盘。本节将主要讲解键盘的输入类型定义、显示键盘时改变输入视图...

大学霸
2015/06/19
0
0
修复ios不支持fixed属性

场景说明:产品需求在wap页面,需要在页面底部固定一块区域执行输入操作。在Android手机中,对position:fixed是完美支持并实现预计效果的,但ios系统手机测试时出现输入框光标不居中和底部区...

碌星
05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL SQL 常见用法

某字段重复记录 select a.fieldA from tableA a group by a.fieldA having count(a.fieldA)>1;==select * from (select a.fieldA, count(1) as faCount from tableA a group......

园领T
5分钟前
0
0
如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则

以下是如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则。 防火墙 防火墙是一组规则。当数据包进出受保护的网络区域时,进出内容(特别是关于其来源、目标和使用的协议等信息)会...

linuxprobe16
29分钟前
0
0
发生系统错误 5 拒绝访问

1、使用命令net start *开启一个服务的时候,出现发生系统错误5,拒绝访问。 解决:切换到管理员模式执行此命令即可。

fang_faye
37分钟前
1
0
devops 成长路线

https://36kr.com/p/5157249.html

swingcoder
49分钟前
1
0
Java内存区域的划分和异常

行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域。 程序计数器 线程私有。可看作是当前线程所执行的字节码的行号指示器,字节码解释器的工作是通过改变这个计数值来读...

架构师springboot
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部