zoukankan      html  css  js  c++  java
  • iOS开发- 界面传值(1)-通知模式(广播)

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

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

    iOS的设计模式中,通知模式也是当中重要的模式之中的一个,
    Notification直译为通知,事实上本人认为叫做广播模式更为贴切。
    它的作用就是一个对象对多个对象的同步操作。
    使用方法非常easy,一个对象发出一个广播,须要收听的听众就先注冊一下,然后选定频道,完了就能够收听广播的内容了。

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

    以下是一个简单的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];
        
    }


  • 相关阅读:
    vue 解析二维码
    自定义组件双向数据绑定,父v-model,子value用.$emit('input', newVal)
    懒加载组件
    float双飞布局
    [转]MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法
    【转】nginx产生【413 request entity too large】错误的原因与解决方法
    [其它]三维立体图简单入门含样例
    [其它] 美图看看 黑色皮肤下载不了
    vue element 表格内容文字太长加提示
    gitee webide怎么暂存文件(吐槽,gitee的产品真是吃屎的)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4020462.html
Copyright © 2011-2022 走看看