当前位置:编程学习 > wap >>

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
 


补充:移动开发 , IOS ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,