概述:
UICollectionViewController 类似于 UITableViewController 是UICollectionView 与 控制器类的整合封装.其作用也就主要体现在UICollocationView
UICollectionViewController 基本属性
- (instancetype)initWithCollectionViewLayout:( *)layout |
@property(nonatomic, retain) *collectionView |
@property(nonatomic, readonly) *collectionViewLayout |
@property(nonatomic) BOOL clearsSelectionOnViewWillAppear
|
@property(nonatomic, assign) BOOL useLayoutToLayoutNavigationTransitions |
UICollectionView: 是一种新的数据展示方式, 简单来说可以把他理解成多列的UITableView.
UICollectionView概述:
标准的 UICollectionView 包含三个部分,他们都是UIView的子类:
- Cells 用于展示内容的主体,对于不同的cell可以指定不同尺寸和不同的内容,这个稍后再说
- Supplementary Views 追加视图 如果你对UITableView比较熟悉的话,可以理解为每个Section的Header或者Footer,用来标记每个section的view
- Decoration Views 装饰视图 这是每个section的背景,比如iBooks中的书架就是这个----不管一个UICollectionView的布局如何变化,这三个部件都是存在的。
关于 UICollectionView 的实现:
实现一个UICollectionView 和实现一个UITableView基本上没有什么大的区别.
他们都是同样的datasource 和 delegate 设计模式: datasource为view提供资源, 告诉view要显示些什么以及如何显示他们, delegate提供一些样式的小细节以及用户交互的响应.
同样有三个必须实现的协议方法:通过协议方法进行两个视图子类(cells/ supplementary views)的展示.
需要注意的是, 对于Decoration views, 提供方法并不在UIControllerViewDataSource中, 而是直接在UICollectionViewLayout类中的(因为它仅仅于视图相关, 而与数据无关).
同样具有重用机制. 但是需要注意的时,在UICollectionView中, 不仅cell可以重用, Supplement View 和 Decoration view 也可以并且应该被重用的.
关于 UICollectionView 的代理:
UICollectionViewDelegate: View的外形, 用户交互等由UICollectionViewDelegate来负责, 而数据的提供则有UICollectionViewDataSource负责.
关于Cell:
相对于UITableViewCell, UICollectionViewCell则相对简单,这主要是由于展示对象的性质决定的, 因为UICollectionView展示的对象更为灵活,因此需求也就千奇百怪. 因此SDK提供给我们的默认UICollectionViewCell在结构上比较简单, 由上至下: cell本身的View/ backgroundView/ selectedBackgroundView/ contentView.
UICollectionViewLayout:
UICollectionView的精髓.可以通过对其子类化实现对单元格的自定义布局, 这也就是UICollectionView 和 UITableView的最大区别了. UICollectionViewLayout可以说时UICollectionView的大脑和中枢, 它负责cell Supplementary View 和 Decoration Views 进行组织, 为他们设定各自的属性, 包括但不限于: 位置/ 尺寸/ 透明度/ 层级关系/ 形状/ 等等....
Apple 为我们提供了一个最简答可能也是最常用的默认的layout对象, UICollectionViewFlowLayout. Flow Layout 简单说就是一个直线对其的layout. 通过对这个子类的子类化可以实现大部分的瀑布流类的简单实现.
总结:
总的来说, 一个UICollectionView的实现必须包含两个必要的部分: UICollectionViewDataSource 和 UICollectionViewLayout分别提供展示的View内容和 展示的View的位置. 和一个交互部分: UICollectionViewDelegate. 而 Apple给出的UICollectionViewFlowLayout已经是一个很强力的layout方案了.但是仅仅如此还是不够的. UICollectionView的强大之处, 就在于各种layout的自定义实现, 以及他们之间的切换.
1. UICollectionView
1.1 基本属性/方法
@property
(
nonatomic
,
assign
)
id
<
>
delegate
@property
(
nonatomic
,
assign
)
id
<
>
dataSource
代理
|
@property
(
nonatomic
,
retain
)
*
backgroundView
背景视图
|
- (
void
)
registerClass:
(
Class
)
viewClass
forSupplementaryViewOfKind:
(
*
)
elementKind
withReuseIdentifier:
(
*
)
identifier
- (
id
)
dequeueReusableCellWithReuseIdentifier:
(
*
)
identifier
forIndexPath:
(
*
)
indexPath
重用方法
|
@property
(
nonatomic
,
retain
)
*
collectionViewLayout
- (void)setCollectionViewLayout:( *)layout
animated:(BOOL
)animated
切换布局
|
- (
void
)
reloadData
- (
void
)
reloadSections:
(
*
)
sections
- (
void
)
reloadItemsAtIndexPaths:
(
*
)
indexPaths
数据更新
|
- (
NSInteger
)
|