利用观察者模式在view和ControllerView之间传值
来源:互联网 发布:生意参谋数据分析 编辑:程序博客网 时间:2024/05/15 09:59
1.利用观察者模式在View和ControllerView之间传值
最近在学网络请求,因为要实现MVC模式,将View与Controller分开在俩个文件间写,这就涉及到了View和ViewController之间传值的问题,按照以前写UI的经验,完全可以用属性传值,但是经过自己的一番测试,发现都ViewController里数据请求到之后,我们已经建立了View的空间,可是View上铺的各种标签的值需要根据请求来的数据做出相应的改变,例如铺在View上的UIImageView需要加载图片等等,可能因为网速等原因,造成数据加载不上去等,这时候,可能就需要一个观察者来观察View里属性的变化,如果发生变化,则利用变化改变View上各种视图的值。相关操作见下代码:
在View的initWithFrame:方法里加代码一段
[self addObserver:self forKeyPath:@"movie" options:NSKeyValueObservingOptionNew context:@"change"];此处的代码可以理解为给self添加了一个观察者self,让后面的self观察前面的self里的movie属性,该处的move是从ViewController里打包传来的数据类,option参数对应的是你想要的是改变之后的值(New)还是改变之前的值(Old),context参数可以随意填一个字符串,没有搞明白他在干什么的时候用。然后,我们需要一个方法,来接收改变后的值,该方法就是:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context当move发生变化之后,则会调用上面这个方法,参数change是个字典,他的key ‘ new ’,对应的value便是movie属性变化后的值,然后将其拿来修改view里的视图便可。
其实这里使用观察者模式有点大才小用,因为movie的值在这个页面里只变化一次,观察者在观察一个频繁发生变化的对象的时候将有更大的用处,在这里感谢波哥对我的指点。
在最后别忘记在dealloc里对观察者进行销毁。(别让人家一直盯着呀)
- (void)dealloc{ [_movie release]; [self removeObserver:self forKeyPath:@"movie"]; [super dealloc];}
更好的解决方案是,重写movie的set方法:
- (void)setMovie:(Movie *)movie{ if (_movie == movie) { return; } [_movie release]; _movie = [movie retain]; [self setData];}setData里是通过属性修改View上的视图。
本人刚开始学IOS,以上观点有不同意见或者需改正的地方欢迎留言或者加qq 263506069一起商量学习。
0 0
- 利用观察者模式在view和ControllerView之间传值
- 【MVC架构】——如何利用Json在View和Controller之间传递数据
- 利用Parcelable 在activity之间传值
- 利用协议在view controller之间传递数据
- 利用观察者模式实现data和ui的独立演化
- 利用secureCRT在主机和虚拟机之间传文件
- 利用观察者模式实现通知
- 设计模式-观察者模式,在各种对象之间划分清晰的界限
- [设计模式]_[观察者模式在窗口之间消息传递的使用例子]
- 利用代理模式进行页面之间的传值
- 观察者模式接口传值
- 在Xamarin开发,使用MessageCenter在ViewModel和View之间传递值
- MVC- View和Controller之间的传值
- 观察者模式和监听器
- 委托和观察者模式
- 事件和观察者模式
- 观察者模式和事件
- 观察者和监听器模式
- Q4.5
- Java 流
- php模块memcache和memcached区别分析
- hdu 1733 最大流sap
- 判断A树是否包含B树结构
- 利用观察者模式在view和ControllerView之间传值
- Abstract Factory - 抽象工厂模式
- 我的心情
- UIPageControl与UIScrollView的结合使用
- 高效使用hive
- 字节数组流
- UVA 705 Slash Maze
- 一个完整的项目管理流程
- ReportStudio入门教程(五十五) - 对每个月份进行排名