博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS边练边学--通知机制和键盘处理小练习
阅读量:6508 次
发布时间:2019-06-24

本文共 3202 字,大约阅读时间需要 10 分钟。

一、发送通知

1 NSNotification *note = [NSNotification notificationWithName:@"通知的名称,随便写,例如:你妈叫你回家吃饭" object:self userInfo:@{
@"time":@"11:30",2 @"desc":@"回家吃饭"3 }];4 NSNotificationCenter *center = [NSNotificationCenter defaultCenter];5 [center postNotification:note];

二、接收通知:

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

三、键盘处理小练习

  注意事项:tableView的高度约束取消,如果约束在的话,tableView无法实现上移,只能实现往上压缩

  正确做法:设置tableView的高度约束等于父类约束的高度减去最下面工具栏的高度,如图:

  <1>将键盘的显示和隐藏分开处理的情况

  接收通知的代码:

1 - (void)viewDidLoad {2     [super viewDidLoad];3     // addObserver-谁来接收 @Selector-接收完成需要执行的方法,带一个参数,接收通知中心发来的NSNotofication对象4     // object-发送消息的对象,nil-不管谁发送的,只要是name中的消息都接收,这里监听的是键盘的即将弹出的消息,系统发出的消息是字符串常亮5     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];6     // 接收键盘隐藏的通知7     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];8 }

  接收到通知后的处理代码:

1 - (void)keyboardWillShow:(NSNotification *)note 2 { 3     // 取出时间 4     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 5     // 取出键盘显示出来后的最终frame 6     CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 7     // 改变约束 8     self.bottomSpacing.constant = rect.size.height; 9     // 动画效果10     [UIView animateWithDuration:duration animations:^{11         [self.view layoutIfNeeded];12     }];13 }14 15 - (void)keyboardWillHide:(NSNotification *)note16 {17     // 取出时间18     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];19     // 约束改为020     self.bottomSpacing.constant = 0;21     [UIView animateWithDuration:duration animations:^{22         [self.view layoutIfNeeded];23     }];24 }

  <2>将键盘显示和隐藏一起处理的情况

- (void)viewDidLoad {    [super viewDidLoad];    // 接收通知    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardChange:) name:UIKeyboardWillChangeFrameNotification object:nil];}

 

1 - (void)keyboardChange:(NSNotification *)note 2 { 3     // 取出时间 4     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 5     // 取出键盘最终的frame 6     CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 7     self.bottomSpacing.constant = [UIScreen mainScreen].bounds.size.height - rect.origin.y; 8     [UIView animateWithDuration:duration animations:^{ 9         [self.view layoutIfNeeded];10     }];11 }
1 - (void)keyboardChange:(NSNotification *)note 2 { 3     // 取出时间 4     CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; 5     // 取出键盘最终的frame 6     CGRect rect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 7     self.bottomSpacing.constant = [UIScreen mainScreen].bounds.size.height - rect.origin.y; 8     [UIView animateWithDuration:duration animations:^{ 9         [self.view layoutIfNeeded];10     }];11 }

四、最后一步,也是最重要的一步,记得取消注册的通知监听器

- (void)dealloc{    [[NSNotificationCenter defaultCenter] removeObserver:self];}

 

转载地址:http://hubfo.baihongyu.com/

你可能感兴趣的文章
今年以来硅晶圆涨幅约达40%
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
云存储应用Upthere获7700万美元股权债务融资
查看>>
国家互联网应急中心何世平博士主题演讲
查看>>
洗茶,你误会了多少年?
查看>>
贵阳高新区力争打造“千亿级大数据园区”
查看>>
安防众筹不止于卖产品 思维拓展刺激消费
查看>>
OpenSSH曝高危漏洞 会泄露私钥
查看>>
艾特网能获2016APCA用户满意品牌大奖
查看>>
《CCNP TSHOOT 300-135学习指南》——第2章 结构化故障检测与排除进程
查看>>
《Java EE 7精粹》—— 2.5 非阻塞I/O
查看>>
《Python数据科学实践指南》一2.2 字符串
查看>>
《R数据可视化手册》——1.1 安装包
查看>>
《iOS创意程序设计家》——导读
查看>>
spring-aop
查看>>
android RecycleView Adapter简单封装
查看>>
PgSQL · 案例分享 · 递归收敛优化
查看>>