UICollectionViewController说白了就是一个UIViewController + UICollectionView = UICollectionViewController。 这一点和UITableViewController是同样同样的。编程
由上图可知,UICollectionViewController的父亲(父类)是UIViewController, 而UIViewController的父亲是UIResponder,UIResponder继承自NSObject。这个继承关系和UITableViewController是同样同样的, 也就是说UICollectionViewController和UITableViewController是兄弟或者姐妹关系。这样比的话他俩就亲近多了。bash
这些协议也和UITableViewController遵循的协议相似,经常使用的仍是UICollectionViewDataSource(数据源)和UICollectionViewDelegate(委托代理), 上面这两个经常使用的协议就很少说了和UITableViewController的用法相似。布局
UITraitEnvironment 是iOS8之后才引入的新的协议接口,它和Size Class有关,这个类封装了像水平和竖直方向的Size Class等信息,iOS8的UIKit中大多数UI的基础类(包括UIScreen, UIWindow, UIViewController, UIPresentationController 和 UIView)都实现了UITraitEnvironment这个接口,能够经过这个接口来作一些控件显示,屏幕适配等一些工做。ui
UIContentContainer 是iOS8以后添加的新的协议,也是和Size Class相关的协议。该协议中的方法能够帮助你适配视图控制器上的内容,好比内容尺寸和位置等。spa
UIViewController 和 UIPresentationController(iOS8的新特性,在这儿不作过多介绍)’象为该协议提供默认的实现方法。当建立自定义视图控制器或者展现控制器时,你能够重写默认的实现方法来调整你视图控制器的内容。例如,你可使用该方法来调整子视图控制器的大小或位置。3d
由上面可知UICollectionViewController是iOS6之后推出的东西,相对起来仍是比较新的。代理
- 若是你的集合视图控制器与nib文件或者Storyboard进行了绑定,那么他的视图将会从nib文件或者Storybaord中进行加载。若是你是使用编程的方式来建立集合视图控制器,那么将会自动建立一个已经配置好的collection view, 而这个collection view能够经过collectionView来进行访问。
2.当从nib文件或者Storyboard中加载集合视图时,集合视图的数据源(Data source)和代理对象(Delegate Object)是从nib或者Storyboard中获取的。若是data source 或者 delegate没有被指定的话,collection view将会自动赋值一个未知的对象。code
3.当集合视图首次出现时会从新加载上面的数据。当视图每次显示时,也会清除当前的选择。不过你能够把属性clearsSelectionOnViewWillAppear设置成NO来改变这种行为。cdn
你能够建立一个自定义的UICollectionViewController子类来管理你的集合视图。当你初始化视图控制器时,你可使用initWithCollectionViewLayout:方法来指定集合视图想要使用的布局方式。由于刚建立集合视图是没有尺寸或者内容的,data source和delegate是一个典型集合视图中所必须的信息。对象
你能够重写loadView或者其余超类中的方法,可是若是你这样作, 你必须确保在你实现的方法中使用super调用了超类中相应的方法。若是你没有这么作,集合控制器有可能没有执行全部须要执行的任务来保证集合视图的完整。
使用initWithCollectionViewLayout: 方法来初始化UICollectionViewController的对象,该方法能够初始化和根据提供的布局来配置集合视图。布局会控制集合视图上的单元格(Cell)的排列方式。默认的是Flow Layout.
(1) 从控件库中拖拽出Collection View Controller ,你能够在Cell上添加一个ImageView, 而且添加上图片,这样看起来也漂亮一些。你也能够给Cell设置一个背景色便于区分。
(2) 设定Cell的默认宽高,具体以下图所示
(3) 设定Cell的重用标示符为"Cell"这个咱们要在代码中使用
(4) 给集合视图控制器关联代码,并设置Storyboard ID
(1) 返回Section个数的方法
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
复制代码
(2) 返回每一个Section中Cell个数的方法
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 30;
}
复制代码
(3) 经过Cell重用标示符来选择和重用Cell
1 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
2 UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
3
4 // Configure the cell
5
6 return cell;
7 }
复制代码
经过上面的步骤一个简单CollectionView就能够运行起来了,最终运行效果以下所示:
今天这篇博客的内容算开个头,后边回由浅入深,慢慢更新博客。今天就是一个Ready的过程,下篇博客将会基于今天这个工程介绍其余的关于UICollectionView的东西,如UICollectionViewLayout等,来逐渐领略UICollectionViewController的魅力。
你认为如何?您是否已经将项目迁移到SWIFT5.1,请经过加咱们的交流群 点击此处进交流群 ,来一块儿交流或者发布您的问题,意见或反馈。
做者:青玉伏案