浅谈通知NSNoticfication----通知实例操作

(1)通知是什么?

之前写过一篇文章,也是关于通知的,但是偏理论化.

NSNotification的使用:http://blog.csdn.net/v5v6_neil/article/details/39120671

今天来一篇偏重实际应用的通知实例.相信这样两篇文章后,能够给让我们对于通知有较为深刻的理解了.


(2)通知能够解决什么问题?

通俗的讲,通知是一种广播模式,当有多个页面对某一个页面的某个控件(或者特性)关注时候,我们可以采用通知模式.这样,当我们关注页面的特性发生变化后,其他页面就检测到这个变化,然后哥哥页面会采取相应的响应措施.


(3)通知实现实例?

我做了一个小的demo,demo中含有三个页面,我想要实现的是当第二个页面的UITextField开始编辑的时候,我的第一页和第三页设置更改背景色.

首先第二页发送通知,这个发送通知的时间点很重要,我们需要检测的时UITextField是否开始编辑,那么就需要写在代理方法里面

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"开始编辑了");
    [[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:self];
}

然后我们在第一页注册监听者,以及监听后的实现方法.

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //初始化通知中心
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(changeColor) name:@"changeColor" object:nil];

}

当监听到通知后,会有相应响应

- (void)changeColor
{
    self.view.backgroundColor = [UIColor redColor];
}

同样,我们在第三页注册监听者以及设定监听方法(这里不再赘述).

到此为止,我们的通知设定完毕,当我们开始编辑UITextField框的时候,就会触发发送消息的方法,广播消息,当第一页和第三页收到消息,就会采取相应行动(changeColor).


(4)通知的传值应用

通知不仅可以用来广播消息,同时在广播的时候可以传值,给所有他得粉丝(监听者)传值具体方法如下

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"开始编辑了");
    //[[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:self];
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:self userInfo:[NSDictionary dictionaryWithObject:@"red" forKey:@"color"]];
    
}

这里就是将一个字典信息发送出去.自然粉丝的接收也需要从字典里面取值

- (void)changeColor:(NSNotification*)notification
{
    NSDictionary *dic = [notification userInfo];
    NSString *str = [dic valueForKey:@"color"];
    if ([str isEqualToString:@"red"]) {
        self.view.backgroundColor = [UIColor redColor];
    }
    
}

(5)最后有一点需要强调的是,无论有多少个监听者,每个注册为监听者的对象最后都得释放,不然就会像我之前文章中描述的那样,可能出现野指针的崩溃.


- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"back" object:nil];
   
}


OK,finished! Good,luck!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值