iOS开发 ----- Controller之间的传值
2015-09-22 19:52
363 查看
Controller之间的传值
属性传值
A->B传值,在push之前,给B的对象的属性赋值即可,相对简单 但这样的话B->A无法传值
单例传值
单例的话,每次实例化一个对象都是时原来的,所以不会改变 这个方法借助第三方类,不管是A->B 还是B->A 之间的传值都可以实现
block传值
1.A->B的传值 正向传值 流程 1.在B里生命一个block,然后在init的时候把block要做的事情写好 2.在push之前,调用 b.block();把值传过去即可 其实这里的的block也用到了属性,毕竟在push之前调用,要把值保存下来,所以正向传值的时候并没有什么优势 反向传值 流程 1.在A里声明block,写好要做的事 2.在B里声明block 3.在push之前,把A的block赋值给B的block 4.在B->A的时候,也就是pop之前,b.block();即可 这里反向从B中操作了A,为了避免强引用造成的内存泄露,所以在A的block中,把self变为week __week AController * controller = self;
代理传值
代理传值一般用来反向传值即从A->B之后,B传值给A 流程 1.在B里声明一个协议,写好实现方法func 2.在B里声明一个遵守这个协议的代理 3.在A里遵守这个协议,并实现协议的方法func 4.在A里,A->B push之前设置B的代理为A 5.在B里,pop之前,[]self.delegate func()];
通知中心传值
正反都可以,原理是一样的,通知中心是一个单例,每个APP只有一个通知中心,类似于电台,但一个通知中心可以有多个频道,每个频道传递不同的数据,每个controller都可以监听信息,获取对自己有用的信息,然后通过view展示 简单的说就是, 谁要传值,谁就建立一个频道,写入自己要传递的信息 谁要接受,谁就去监听这个频道,获取值之后,做自己想做的事情 在B->A 也就是pop之前 建立一个名叫changeColor的频道,里边传递的内容时blue [[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:@"blue"]; 在A->B 之前,可以在viewWillAppera中,声明监听电台的方法 当可以从电台changeColor收到消失的时候,就会调用changeColorFunc这个方法 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColorFunc:) name:@"changeColor" object:nil]; 这里可以直接通过notif拿到频道传递的数据 -(void)changeColorFunc:(NSNotification *)notif { //这里会存储广播信息 NSString * str = notif.object; //notif.userInfo 一个字典,objectForKey 取到相关数据 //对应post方法 中的userInfo if ([str isEqualToString:@"blue"]) { self.view.backgroundColor = [UIColor blueColor]; } }
相关文章推荐
- iOS极光推送-具体步骤
- iOS8中Today Extension删除
- IOS去掉NavigationBar底部的那条黑线
- iOS ——点击sectionHeader进行跳转,不同的sectionHeader标签不同
- ios激情详解之GCD
- ios学习--TableView详细解释
- ios 类似QQ登录成功后的提示框
- IO7 和IOS8 弹出透明模态窗体
- iOS超精细详解之GCD
- 于ios7在遇到一些发展deprecated问题
- iOS 蓝牙开发资料收集
- fir.im Weekly - iOS9 适配开发教程
- fir.im Weekly - iOS9 适配开发教程
- ios 修正waring:Method override for the designated initializer of the superclass '-init' not found
- iOS官方Sample大全
- 【转】iOS中几种数据持久化方案:我要永远地记住你!
- iOS开发CGD买票
- iOS开发CocoaPods使用详细说明
- 关于iOS 9 的一些新特性
- iOS 音频播放的3中方式