您的位置:首页 > 移动开发 > IOS开发

iOS 广播模式

2016-03-11 00:00 459 查看
摘要: NSNotificationCenter

之后的几篇博客, 记录下不同界面间传值的常用办法。
这篇文章记录广播的方式。
iOS的设计模式中,通知模式也是其中重要的模式之一,
Notification直译为通知,其实本人觉得叫做广播模式更为贴切。
它的作用就是一个对象对多个对象的同步操作。
用法很简单,一个对象发出一个广播,需要收听的听众就先注册一下,然后选定频道,完了就可以收听广播的内容了。

但是要注意一点, 在收听之前, 一定要先注册。 不然发送的广播接受不到, 也就是值改变了, 不会做出响应。
下面是一个简单的demo, 效果如下:
第一个界面, 做为听众, 注册收听广播。
第二个界面, 做为广播, 发送广播。
当第二个界面发出一个广播后, 第一个界面自动接收。



可以参考git上的源码: 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.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: