iOS----通知

2016-04-26  本文已影响91人  PlatonsDream

监听下一个页面传回来的广播,修改当前页面的标题名称

播放广播

secondViewController.h

typedef void(^sendValue)(NSString *valueStr);
@interface SecondViewController : UIViewController
//copy修饰,将block从栈区拷贝到到堆区,方便管理内存(因为在堆区才可以手动的管理内存)
@property (nonatomic, copy) sendValue sendValueBlock;

//播放 一条广播
    [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:self.myTextField.text userInfo:@{@"title":self.myTextField.text}];
    //block 传值,block的调用。那个类需要text的值,就在那个类中实现block
    self.sendValueBlock(self.myTextField.text);

[NSNotificationCenter defaultCenter] //广播中心

接收广播, 把self设置成一个观察者

RootViewController.m

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotifi:) name:@"test" object:nil];

//实现block方法
    secondVC.sendValueBlock = ^(NSString *value){
        
        self.navigationItem.title = value;
    };

[NSNotificationCenter defaultCenter] //通知中心,播放、监听所有的广播

Observer:self 监听广播的人,这里是self
第二个参数:方法选择器,收到广播时候的回调方法,可以不带参数,也可以带参数。如果带参数,参数的类型为广播类型(NSNotification *)
name:广播的名称,便于监听广播的人,使用name查找广播
object:标记。如果想要监听所有的广播内容,那么赋值为nil

广播接收后回调方法

- (void)receiveNotifi:(NSNotification *)notification {
    
    NSLog(@"object---%@", notification);
    NSLog(@"userInfo----%@", notification.userInfo);
    
    self.navigationItem.title = [notification.userInfo objectForKey:@"title"];
}

notification是接收到的广播,类型为NSNotification *
接收广播后根据键的值获取标题名称

最后,把监听对象销毁

//RootViewController.m
- (void)dealloc {
 [[NSNotificationCenter defaultCenter] removeObserver:self];
}
上一篇下一篇

猜你喜欢

热点阅读