ios UICollectionViewController集合视图(一)

集合视图与表格的异同

    UICollectionView实例会把各项数据展示成一份有序的集合。与表格视图一样,集合视图也由单元格、头部及尾部构成,而且由数据源方法及委托方法所驱动。但与表格不同的地方在于,集合视图还引入了与布局有关的类,这个类用来制定各条目应该如何摆放在屏幕上。该类负责管理每个单元格的位置,使得对应的条目可以在必要时出现在适当的地方。

    两者都提供了核心的试图类及预置的控制器类。这些类都依赖于数据源。数据源负责填充单元格,并提供其他内容信息。此外,两者都需要通过委托来响应用户的操作。


    两者之间还有许多根本区别的,我们先从不太起眼的索引路径说起。这两个类都把区段用作主要的分组方法,每个区段里面都含有一些单元格,这些单元格又都有各自的索引号。由于集合视图既可以垂直滚动,也可以水平滚动,所以它使用的术语就与表格不同了。表格采用区段和行来定位单元格,而集合视图则采用区段和条目来定位。

    集合视图引入了一种新的内容——装饰视图,这种视图可以提供诸如背面图版等视觉增强效果。对于集合视图来说,单元格与滚动方向只是最基本的定制方式。开发者可以使用所能想到的任何隐喻来定制整套视图的样貌,使其与自己所要表达的概念相一致。集合视图的头部与尾部也与表格视图不同,它把两者转化成了补充视图,并且提供了比表格稍微灵活一些的API。

两者在实现层面的区别

    编写实际的程序时,构建表格视图和构建集合视图所用的代码有几个地方是不同的。集合视图不太允许数据的延迟加载。有一条经验:创建集合视图的时候,为该视图提供内容的数据源必须完全准备好,哪怕它现在只能为视图里的少数几个单元格提供数据,甚至暂时没有单元格数据都可以,但只要它自身准备好就行,稍后可以再从其他地方加载数据。

    不能等到程序执行初始化方法、loadView方法或viewDidLoad方法的时候再准备数据源,而是必须首先把它准备好。可以在应用程序委托中准备,也可以在实例化集合视图并将其添加到其他视图之前,或是在把新的集合视图控制器设为其他对象的子控制器之前把数据源准备好。要是没有准备好,程序就会崩溃,而这肯定不是我们想要的用户体验。

    展示集合视图之前,一定要把集合视图的布局对象完全建设好。需要把布局对象的所有细节都设置好,包括滚动方向以及其他不依赖于委托回调的属性。只有准备好这些之后,才能创建并初始化集合视图:

    MyCollectionController *mcc = [[MyCollectionController alloc] initWithCollectionViewLayout:layout];

    如果传给layout参数的值是nil,就会抛出异常。

    在集合视图的生命周期中,并不是只能使用一种布局。开发者可以通过collectionViewLayout属性来直接访问视图的布局。修改这个属性之后,视图就会以不带动画的方式立即更新其布局。有一个简单的方法,能够用动画效果来展示布局的变更过程:

    - (void)setCollectionViewLayout:(UICollectionViewLayout *)layout animated:(BOOL)animated completion:(void(^)(BOOL finished))completion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值