之后的几篇博客, 记录下不同界面间传值的经常使用办法。

这篇文章记录广播的方式。

iOS的设计模式中,通知模式也是当中重要的模式之中的一个,

Notification直译为通知,事实上本人认为叫做广播模式更为贴切。

它的作用就是一个对象对多个对象的同步操作。

使用方法非常easy,一个对象发出一个广播,须要收听的听众就先注冊一下,然后选定频道,完了就能够收听广播的内容了。

可是要注意一点, 在收听之前, 一定要先注冊。 不然发送的广播接受不到, 也就是值改变了, 不会做出响应。

以下是一个简单的demo, 效果例如以下:

第一个界面, 做为听众, 注冊收听广播。

第二个界面, 做为广播, 发送广播。

当第二个界面发出一个广播后, 第一个界面自己主动接收。

iOS开发- 界面传值(1)-通知模式(广播)_git


 

详细实现例如以下:

第一个界面, 注冊成为听众, 并设置收到广播后的响应事件:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

// 我们喜欢听ChangeTheme的广播
// 注冊成为广播站ChangeTheme频道的听众
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

// 成为听众一旦有广播就来调用self recvBcast:函数
[nc addObserver:self selector:@selector(recvBcast:) name:@"ChangeTheme" object:nil];
}


// 这个函数是系统自己主动来调用
// ios系统接收到ChangeTheme广播就会来自己主动调用
// notify就是广播的全部内容
- (void) recvBcast:(NSNotification *)notify
{

static int index;
NSLog(@"recv bcast %d", index++);

// 取得广播内容
NSDictionary *dict = [notify userInfo];
NSString *name = [dict objectForKey:@"ThemeName"];
UIColor *c = [dict objectForKey:@"ThemeColor"];

self.title = name;

self.view.backgroundColor = c;

}



第二个界面, 发送广播

- (IBAction)btnClick:(id)sender
{
// 取得ios系统唯一的全局的广播站 通知中心
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

//设置广播内容
NSString *name = @"设置颜色";
UIColor *color_ = [UIColor redColor];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
name, @"ThemeName",
color_, @"ThemeColor", nil];

//将内容封装到广播中 给ios系统发送广播
// ChangeTheme频道
[nc postNotificationName:@"ChangeTheme" object:self userInfo:dict];

}