iOS开发界面传值——通知模式

Home / iOS MrLee 2015-9-22 2707

iOS的设计模式中,通知模式也是其中重要的模式之一, Notification直译为通知,其实本人觉得叫做广播模式更为贴切。 它的作用就是一个对象对多个对象的同步操作。 用法很简单,一个对象发出一个广播,需要收听的听众就先注册一下,然后选定频道,完了就可以收听广播的内容了。
但是要注意一点, 在收听之前, 一定要先注册。 不然发送的广播接受不到, 也就是值改变了, 不会做出响应。
下面是一个简单的demo, 效果如下:
第一个界面, 做为听众, 注册收听广播。
第二个界面, 做为广播, 发送广播。
当第二个界面发出一个广播后, 第一个界面自动接收。

\


可以参考git上的源码:
https://github.com/colin1994/NotificationTest.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];
    
}

 

本文链接:https://www.it72.com/5904.htm

推荐阅读
最新回复 (0)
返回