1.什么时候广播?
NSNotificationCenter,可以形象的理解成广播,广播是一种通知模式,特点是一对多,我们通过类似建立广播的模式来告诉对象,统一来执行某项任务,这里举一个更为具体的例子,例如我们在使用聊天软件时,有一个设置使用模式的功能,当我们选择好喜欢的模板后发现,不单是选择模板页变换了格式,而是所有的软件界面都改变成了对应的格式。
2.广播的使用步骤:(分三部走)
①建立广播:设置自己的频率(name)
②用户通过调整收音机频率(name)接听广播
③关闭广播
在这里我们来实现一个改变颜色的功能
准备工作:
①首先在SB中生成一个Tab Bar Controller
②生成三个UIViewController的子类,为了方便起见,我直接设置为VC1,VC2, VC3
③将SB中UIViewController的class分别设置为VC1,VC2, VC3
④在VC1中 添加一个Button 并在VC1的代码中添加它的点击方法。
3.代码实现
①初始化NSNotificationCenter
-(IBAction)ClickChangeColor:(id)sender{
//postNotificationName 广播的调频赫兹
//object 要传播的内容
[[NSNotificationCenter defaultCenter]postNotificationName:@"changename" object:[UIColor blueColor]];
}
②注册广播(分别在V1,V2,V3.m中实现代码)
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//name 一定要与上面的name 一致(可以理解为同一赫兹才能接听广播)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ChangeColor:) name:@"changecolor" object:nil];
}
//这里传的参数一定要是NSNotification类型
-(void)ChangeColor:(NSNotification*)notification{
self.view.backgroundColor=notification.object;
}
③关闭广播(分别在V1,V2,V3.m中实现代码)
-(void)dealloc{
//移除广播
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
注意:在这里我是用Tab Bar Controller来实现广播,但是如果按照我的方法来做,最终效果很有可能只有VC1一页完成了变色,这是因为模拟器运行时最初只生成了显示在屏幕上的第一页VC,另两页VC中的内容必须在进入了其中之后才会加载,所以如果我们没有加载另两页VC之前点击换色的按钮只有第一页变色
解决方案:模拟器运行后依次点击下面的Tab Bar Item
这样三页的VC就全部加载成功了,然后再点击换色按钮,就可以成功的完成变色功能了