监听下一个页面传回来的广播,修改当前页面的标题名称
播放广播
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];
}
网友评论