UICollectionView代码创建
简介:
UICollectionView是UIScrollView的子类,显示一组 UICollectionCell 或其子类
UICollectionViewController有数据源,委托 (UICollectionViewDelegate),布局类
1.数据源:UICollectionViewController.返回几行几列等方法
2.委托:UICollectionViewDelegate,哪一列被点击打等方法.
3.布局类:为每个 Cell 布局,如果想按网格布局,则可以使用 UICollectionViewFlowLayout,如果想自定义布局,可以创建 UICollectionViewLayout 的自定义子类.
UICollectionViewCell的 contentView 默认是没有子试图的,所以需要自定义 创建UICollectionViewCell的子类,来添加你想用来显示的东西
创建步骤
网上很多教程都直接在 ViewDidLoad 中创建,但是好像并没什么用,具体细节还有待深究,我的做法是直接将 ViewController 的 view 设置为 CollectionView(创建 UICollectionViewController 文件,并且设置为原始 viewController 的类)
1.声明一个全局变量 UICollectionView *coll,在 loadView 创建 UICollectionView,和 UICollectionViewFlowOut
- (void)loadView { UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; _coll = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 500, 500) collectionViewLayout:layout]; self.view = _coll; _coll.backgroundColor = [UIColor whiteColor]; }
2.viewDidLoad 中注册 Cell ,以便重用,并且设置数据源和 DataSource代理为自己
- (void)viewDidLoad { [super viewDidLoad]; _coll.delegate = self; _coll.dataSource = self; // Register cell classes [_coll registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier]; // Do any additional setup after loading the view.
3.设置数据源
#pragma mark - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 4; } //注册 Cell - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; cell.backgroundColor = [UIColor blueColor]; return cell;
4.布局可以实现在FlowOut 协议中的方法来设置 item 大小,外边距等,这个可以看下文档实现,到这里基本的代码构建就完成了
UICollectionView 和 UITableView 的不同之处
1.最大的不同在于,UITableView 只显示UITableViewCell 一列,而 UICollectionView 可以任意安排 UICollectionCell
2.UICollectionCell 的 contentView 没有子试图,需要自定义,UITableViewCell 可以用默认的
其他倒是都差不多