您的位置:首页 > 产品设计 > UI/UE

iOS7的一些总结:使用UIView的一种有效方法

2015-02-04 21:27 218 查看
在一个典型的MVC结构中,Model部分负责保存目标数据,View部分主要负责实现数据的界面以及将数据显示出来,二者在Controller的操作下协同工作。在iOS应用中,View的实现主要由UIView及其派生类实现,主要由UILabel、UIImageView等等类来显示不同的信息。

这里展示一个demo来说明个人对UIView同数据交互的一种观点,个人意见仅供参考,欢迎讨论。

1、首先建立一个UIView的子类用于定制我们的视图对象

头文件:

m文件:

在这个UserInfoView新建的时候,在initWithFrame中建立各个子视图,但是只是单纯新建一个对象而已,其frame设置为0。另外,还重写了init函数,在函数中设置了指定的View大小,这样在Controller新建视图的时候不需要指定参数直接按照指定值进行操作。

UserInfoView中各个子视图的设置,在layoutSubView中完成,包括设置子视图的frame和背景颜色。layoutSubView函数可能经常被调用到,主要由以下几种情况:

· 当addSubView被调用时,被添加视图以及其子视图的layoutSubView会被调用;

· 当视图的frame发生改变时,会调用该视图的layoutSubView;

· 当滚动UIScrollView的时候会调用该视图及其父视图的layoutSubView;

· 旋转设备的时候;

· 向该视图发送setNeedLayout消息的时候。

2. 由Controller向View中发送数据

ViewController类的实现如下:

ViewController的默认视图上,分别实现了两个按钮并分别设置了响应函数。我们的目的是通过选择不同的按钮来改变UserInfoView中显示的数据。从两个响应函数setPeople1Data和setPeople2Data的实现可知,UserInfoView所需要的信息都被封装在了一个字典型变量param中,对view的修改仅仅做了一个操作,即将该字典变量赋给了UserInfoView实例的一个property,通过这种改变一下目标view属性的方式即可完成对显示信息的更改。这样,Controller并不关心UserInfoView实例是如何解析字典参数的,也不需要对该实例进行其他操作,当需要更新数据的时候只需要一次赋值就可以了。如此可以最大程度地解除Controller和View的耦合性,提高代码的逻辑简洁度和可复用性。

再回到UserInfoView类中的实现方法。如何实现在字典类property改变的同时对自己的子视图进行重写数据操作呢?方法很简单。首先将重写子视图数据的代码分离到loadData函数中,然后重写NSDictionary *param这个property的set方法(即setParam),然后在该set方法和layoutSubView方法中调用loadData方法就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  功能 自己