NSNotificationCenter通知

NSNotificationCenter 相比与 Delegate 可以实现更大的跨度的通信机制,可以为多个无引用关系的对象进行通信。

利用通知逆向传值:通知的使用首先注册获取通知中心单例

 (1)       //1.获取通知中心

        NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

        //2.发布通知

        /**

         第一个参数:通知中心的名字

         第二个参数:通知的发布者

         第三个参数:附带信息

         */

        [center postNotificationName:@"changeColor" object:self userInfo:@{@"color":color}];

        //发布第二个通知

        [center postNotificationName:@"changeFont" object:self userInfo:@{@"font":[UIFont systemFontOfSize:40]}];

        //注意:最好在跳转之前进行通知的发布

        [self.navigationController popViewControllerAnimated:YES];

(2)接收通知的传值

//注意:一般将观察者的注册放在viewWillAppear:里面,因为这个方法在每次进入当前界面的时候都会执行.

//不放在ViewDidLoad里面

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    //注册观察者

    //1.通知单例获取通知中心

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

//2.注册观察者

    /**

     第一个参数:要注册的观察者

     第二个参数:接到通知后要执行的功能

     第三个:通知的名字

     第四个:通知的发布者,通常为nil

     */

    [center addObserver:self selector:@selector(changeBackgroundColor:) name:@"changeColor" object:nil];

    

    //注册changeFont通知的观察者

    [center addObserver:self selector:@selector(changeFont:) name:@"changeFont" object:nil];

}

//changeFont通知对应的方法

-(void)changeFont:(NSNotification *)notification{

    ZKButton *button = (ZKButton *)[self.view viewWithTag:10];

    NSDictionary *dic = notification.userInfo;

    

    button.titleLabel.font = dic[@"font"];

    

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

//通知的方法

//注意:当前的参数不是通知中心,是通知

-(void)changeBackgroundColor:(NSNotification *)notification{

    //从通知中取出附带信息

    //在附带信息中拿到要设置的颜色值

    NSDictionary *dic = notification.userInfo;

    

    //NSLog(@"notification.name%@,notification.object%@,dic[color]:%@",notification.name,notification.object,dic[@"color"]);

    //利用获取到的颜色值改变主界面的背景色

    self.view.backgroundColor = dic[@"color"];

   //释放观察者

    //作用:将当前的观察者彻底释放(结果:当前观察者下的所有其他的通知都无法接受)

    //[[NSNotificationCenter defaultCenter] removeObserver:self];

    /**

     * 第二个参数:当前的通知名字

     作用:只释放当前通知自己对应的观察者(结果:当前观察者下的其他通知可以照常接受)

     */

    [[NSNotificationCenter defaultCenter]removeObserver:self name:@"changeColor" object:nil];

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值