iPhone开发学习笔记006—— NSNotification自定义通知名
最近在网上看到一个“在iPhone开发中给键盘加个隐藏工具条”的demo,下下来后,运行后发现,点击“隐藏键盘”之后,之前的TableView不能恢复为应用刚启动时的显示,因为当TextField获得焦点时,会弹出软键盘,相应的需要通过程序调整界面上的TableView,修改其Frame将之上移。(注:TableView中放了五个TextField)。但是点击“隐藏键盘”后,TableView还是维持在其Frame修改之后的样子,没有恢复为应用刚启动时的样子。
尝试过在
- (void)textFieldDidEndEditing:(UITextField *)textField;方法中添加修改TableView的Frame使之恢复启动时显示样子的语句,但是发现只要TextField的焦点发生变化,就会调用这个API,比如从第一个TextField跳到第二个TextField,焦点从第一个切换到第二个,再从第二个切换到第三个,第四个。。。只要任意一个TextField发生失去焦点事件,就会调用这个API。结果造成每发生一次焦点切换,界面就会先恢复应用启动时显示的样子,然后很快又变成Frame被修改之后的样子。
也尝试过注册软键盘显示和隐蔵的通知
发现也是一样,焦点从一个TextField切换到另一个TextField,就会先后发送一次UIKeyboardWillHideNotification和UIKeyboardWillShowNotification通知,还是不能实现想要的效果,即只是在点击了“隐藏键盘”之后,才恢复主界面上TableView显示。
后来想到了自定义通知,才解决这个问题:
Demo里面有个HiddenKeyBoard函数,这个是点击“隐藏键盘”按钮之后会调用的selector,那就在这个里面添加发送通知语句:
[[NSNotificationCenterdefaultCenter]postNotificationName:@"mytest"object:nil];
然后在ViewController的viewWillAppear里面注册这个通知:
- (void)viewWillAppear:(BOOL)animated {
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(doAfterKeyboardbarHidden:)name:@"mytest"object:nil];
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
//[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenterdefaultCenter] removeObserver:selfname:@"mytest"object:nil];
[super viewWillDisappear:animated];
}
- (void)doAfterKeyboardbarHidden:(NSNotification*)notification {
//id obj = [notification object];//获取到传递的对象
NSLog(@"++++++ //// +++++");
tableview.frame = CGRectMake(0,40, 320, 340);
}
OK!想要的效果实现了!
贴两张图:第一张是输入,输入完就点“隐藏键盘”,马上界面就恢复正常显示了,即第二张图:
摘自 Code Heaven
相关新闻>>
- iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
- iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
- iPhone开发学习笔记003——UITableViewCell内容自适应高度
- iPhone开发学习笔记004——自定义背景透明非全屏弹出窗口,子类化UIWindow
- iPhone开发学习笔记005——使用XIB自定义一个UIView,然后将这个view添加到controller
- iPhone开发学习笔记007——Xcode4.2下iPhone多视图开发(自已创建MainWindow.xib和不用
- iPhone开发学习笔记008——定制标题三种方法
- 发表评论
-
- 最新评论 更多>>