以后的几篇博客, 记录下不一样界面间传值的经常使用办法。html
这篇文章记录广播的方式。ios
iOS的设计模式中,通知模式也是其中重要的模式之一,
Notification直译为通知,其实本人以为叫作广播模式更为贴切。
它的做用就是一个对象对多个对象的同步操做。
用法很简单,一个对象发出一个广播,须要收听的听众就先注册一下,而后选定频道,完了就能够收听广播的内容了。
git
可是要注意一点, 在收听以前, 必定要先注册。 否则发送的广播接受不到, 也就是值改变了, 不会作出响应。github
下面是一个简单的demo, 效果以下:设计模式
第一个界面, 作为听众, 注册收听广播。函数
第二个界面, 作为广播, 发送广播。post
当第二个界面发出一个广播后, 第一个界面自动接收。spa
能够参考git上的源码:.net
https://github.com/colin1994/NotificationTest.git
设计
具体实现以下:
第一个界面, 注册成为听众, 并设置收到广播后的响应事件:
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.
}
第二个界面, 发送广播
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.
}