文档章节

iOS NSNotificationCenter(广播)的介绍及使用

JoshSone
 JoshSone
发布于 2016/11/12 07:38
字数 624
阅读 22
收藏 0

1.什么时候广播?

NSNotificationCenter,可以形象的理解成广播,广播是一种通知模式,特点是一对多,我们通过类似建立广播的模式来告诉对象,统一来执行某项任务,这里举一个更为具体的例子,例如我们在使用聊天软件时,有一个设置使用模式的功能,当我们选择好喜欢的模板后发现,不单是选择模板页变换了格式,而是所有的软件界面都改变成了对应的格式。

2.广播的使用步骤:(分三部走)

①建立广播:设置自己的频率(name)

②用户通过调整收音机频率(name)接听广播

③关闭广播

在这里我们来实现一个改变颜色的功能

 

准备工作:

①首先在SB中生成一个Tab Bar Controller

②生成三个UIViewController的子类,为了方便起见,我直接设置为VC1,VC2, VC3

③将SB中UIViewController的class分别设置为VC1,VC2, VC3

④在VC1中 添加一个Button 并在VC1的代码中添加它的点击方法。

3.代码实现

①初始化NSNotificationCenter

-(IBAction)ClickChangeColor:(id)sender{   
//postNotificationName 广播的调频赫兹
//object               要传播的内容
    [[NSNotificationCenter defaultCenter]postNotificationName:@"changename" object:[UIColor blueColor]];
}

②注册广播(分别在V1,V2,V3.m中实现代码)

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
   //name 一定要与上面的name 一致(可以理解为同一赫兹才能接听广播)
     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(ChangeColor:) name:@"changecolor" object:nil];
}
//这里传的参数一定要是NSNotification类型
-(void)ChangeColor:(NSNotification*)notification{
    self.view.backgroundColor=notification.object;
}

③关闭广播(分别在V1,V2,V3.m中实现代码)

-(void)dealloc{
//移除广播
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}

注意:在这里我是用Tab Bar Controller来实现广播,但是如果按照我的方法来做,最终效果很有可能只有VC1一页完成了变色,这是因为模拟器运行时最初只生成了显示在屏幕上的第一页VC,另两页VC中的内容必须在进入了其中之后才会加载,所以如果我们没有加载另两页VC之前点击换色的按钮只有第一页变色

解决方案:模拟器运行后依次点击下面的Tab Bar Item

这样三页的VC就全部加载成功了,然后再点击换色按钮,就可以成功的完成变色功能了

© 著作权归作者所有

共有 人打赏支持
JoshSone
粉丝 7
博文 76
码字总数 32794
作品 0
长春
iOS工程师
私信 提问
IOS NSNotification 通知

一. 先看下官方对NSNotification通知的解释 1. NSNotification 通知  @interface NSNotification : NSObject   接口通知,继承NSObject,实现NSCopying,NSCoding协议  A container for...

冬季的暖风
08/02
0
0
iOS 8.4 Beta 3 发布,全新音乐应用进一步完善

苹果今天向开发者发布了 iOS 8.4 第三个测试版,距离 iOS 8.4 第二个测试版发布相隔两周。距离 iOS 8.4 第一个测试版发布相隔三周。iOS 8.4 在4月中旬开始测试,而 iOS 8.3正式版在4月初发布...

oschina
2015/05/12
1K
7
iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码

iOS精选源码 iOS 精美过度动画源码(http://www.code4app.com/thread-14827-1-1.html) iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路(http://www.code4app.com/thread-30348-1-1.htm...

sunnyaigd
07/11
0
0
苹果发布 iOS 8.4 测试版,包含全新设计的音乐应用

苹果今天向开发者发布了 iOS 8.4 第一个测试版,距离 iOS 8.3 正式版发布仅仅相隔5天。这次的测试版编译号为 12H407d,开发者可以在 iOS 开发者中心下载,此外,苹果还发布了 Xcode 6.4 测试...

oschina
2015/04/14
2.2K
12
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

统一客服消息返回错误:{"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"}

公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"} 场景:小程序使用公众号的服务消息,推送消息,如果接收人没有关注公众号,就会出...

tianma3798
16分钟前
1
0
Rainbond V5.0 Beta公测公告

Rainbond支撑企业应用的开发、架构、交付和运维的全流程,通过“无侵入”架构无缝衔接各类企业应用,底层资源可以对接和管理IaaS、虚拟机和物理服务器 Rainbond V5.0即日起开启Beta版本公测,...

好雨云帮
34分钟前
2
0
Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
40分钟前
1
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
43分钟前
2
0
多线程的实现方式

多线程是指 一个程序运行时,产生或使用了不止一个线程。 线程的生命周期是怎么样的,下面这张图我们可以看出些端倪: 这章我们主要讨论多线程实现的方式,基础知识部分我们可以下来再恶补。...

搬砖大侠
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部