iOS 广播模式

以后的几篇博客, 记录下不一样界面间传值的经常使用办法。html

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

iOS的设计模式中,通知模式也是其中重要的模式之一,
Notification直译为通知,其实本人以为叫作广播模式更为贴切。
它的做用就是一个对象对多个对象的同步操做。
用法很简单,一个对象发出一个广播,须要收听的听众就先注册一下,而后选定频道,完了就能够收听广播的内容了。
git

可是要注意一点, 在收听以前, 必定要先注册。 否则发送的广播接受不到, 也就是值改变了, 不会作出响应。github

下面是一个简单的demo, 效果以下:设计模式

第一个界面, 作为听众, 注册收听广播。函数

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

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




能够参考git上的源码:.net

https://github.com/colin1994/NotificationTest.git
设计

具体实现以下:

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

view sourceprint?

01.- (void)viewDidLoad

02.{

03.[super viewDidLoad];

04.// Do any additional setup after loading the view, typically from a nib.

05. 

06.// 咱们喜欢听ChangeTheme的广播

07.// 注册成为广播站ChangeTheme频道的听众

08.NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

09. 

10.// 成为听众一旦有广播就来调用self recvBcast:函数

11.[nc addObserver:self selector:@selector(recvBcast:) name:@"ChangeTheme" object:nil];

12.}

13. 

14. 

15.// 这个函数是系统自动来调用

16.// ios系统接收到ChangeTheme广播就会来自动调用

17.// notify就是广播的全部内容

18.- (void) recvBcast:(NSNotification *)notify

19.{

20. 

21.static int index;

22.NSLog(@"recv bcast %d", index++);

23. 

24.// 取得广播内容

25.NSDictionary *dict = [notify userInfo];

26.NSString *name = [dict objectForKey:@"ThemeName"];

27.UIColor *c = [dict objectForKey:@"ThemeColor"];

28. 

29.self.title = name;

30. 

31.self.view.backgroundColor = c;

32. 

33.}



第二个界面, 发送广播

view sourceprint?

01.- (IBAction)btnClick:(id)sender

02.{

03.// 取得ios系统惟一的全局的广播站 通知中心

04.NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

05. 

06.//设置广播内容

07.NSString *name = @"设置颜色";

08.UIColor *color_ = [UIColor redColor];

09.NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

10.name, @"ThemeName",

11.color_, @"ThemeColor", nil];

12. 

13.//将内容封装到广播中 给ios系统发送广播

14.// ChangeTheme频道

15.[nc postNotificationName:@"ChangeTheme" object:self userInfo:dict];

16. 

17.}