iOS开发- 界面传值(1)-通知模式(广播)

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

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

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];

}

iOS开发- 界面传值(1)-通知模式(广播)

时间: 2024-10-13 16:26:58

iOS开发- 界面传值(1)-通知模式(广播)的相关文章

ios学习(界面传值的方法)

ios(学习)界面传值的方法 block: 实现界面传值的方法1.block: 实现界面传值,都是从第二个界面向第一个界面传值:第一种block 首先).在第二个界面secondViewController声明set方法 声明block @property (nonatomic,copy) void(^change)(UIColor *color); 其次).在.m文件实现 实现block的方法 _callback([UIColor redColor]);//注意这里之所以是_callback的

学习IOS开发UI篇--NSNotificationCenter通知中心

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信.NSNotificationCenter 的通信原理使用了观察者模式; 1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block 2. NSNotificationCenter 在某个时机激发事件(以字符串命名) 3. 观察者在收到感兴趣的事件时,执行相应的 Selec

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送、本地推送

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送 2015-05-03 14:12 3510人阅读 评论(0) 收藏 举报 本文章已收录于:  iOS知识库  分类: [IOS -事件响应者链](3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可见的 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(L

iOS开发中MVC、MVVM模式详解

iOS中的MVC(Model-View-Controller)将软件系统分为Model.View.Controller三部分 Model: 你的应用本质上是什么(但不是它的展示方式) Controller:你的Model怎样展示给用户(UI逻辑) View:用户看到的,被Controller操纵着的 Controller可以直接访问Model,也可以直接控制View. 但Model和View不能互相通信. View可以通过action-target的方式访问Controller,比如我们在Sto

iOS开发之---传值大全

通知/代理/block都可以传值 (顺传倒传都可以) 一 顺传 用属性传值最简单明了 二 逆传 用block更简洁 三 通知传值使用场景    1- 很多控制器都需要知道一个事件,应该用通知(传递参数的过程就是传值):    2 - 相隔多层的两个控制器之间传值 ——————————————————————————————————————————————————————————— 8种传值方式(很全面,不知道谁整理的,先谢谢.拿过来大家共同学习) ?定义初始化方法在UI中,?般都是用在一个界面去

iOS开发中UILocalNotification本地通知实现简单的提醒功能

这段时间项目要求做一个类似的闹钟提醒功能,对通知不太熟悉的我,决定先用到xcode自带的本地通知试试,最终成功的实现了功能,特整理分享下. 它的表现特点: app关闭的时候也能接收和显示通知. app处于后台的时候能接收通知也能显示. app处于前台的时候能接收,但不能显示,但是会走应用程序delegate中的方法 具体的创建方法: ->创建一个本地通知对象UILocalNotification ->设置fireDate,AlertBody,AlertAction,soundName,appl

iOS UI08_TableView界面传值

实现两个界面之间内容的传递 // // MainViewController.m // UI08_TableView界面传值 // // Created by dllo on 15/8/7. // Copyright (c) 2015年 zhozhicheng. All rights reserved. // #import "MainViewController.h" #import "SecondViewController.h" @interface Main

IOS开发中如何使用通知NSNotification传值

通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值. 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IBAction)buttonClick:(id)sender { //添加 字典,将label的值通过key值设置传递 NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:self.textFieldOne.text,@"te

iOS开发:Objective-C中通知与协议的区别?

what is difference between NSNotification and protocol? (通知和协议的不同之处?) 我想大家都知道这个东西怎么用,但是更深层次的思考可能就比较少了吧,众所周知就是代理是一对一的,但是通知是可以多对多的.但是为什么是这个样子,有没有更深的思考过这个问题? 今天看了下网上的几个视频教程,KVO.KVC.谓词.通知,算是开发中的高级点的东西了.通知和协议都是类似于回调一样,于是就在思考通知和协议到底有什么不同,或者说什么时候该用通知,什么时候该用