1. UICollectionView佈局
網格視圖,除了提供與UITableView一樣的功能顯示一組順序顯示的數據,還支持多列的佈局。spa
2. UICollectionView 使用代理
> 設置Controller要遵循的協議:ci
UICollectionViewDataSource // 數據源協議it
UICollectionViewDelegate // 數據行爲協議io
UICollectionViewDelegateFlowLayout // 數據流式佈局協議class
> 建立流式佈局select
flowLayout = [[UICollectionViewFlowLayout alloc] init]scroll
> 設置該佈局下滑動方向方法
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical / Horizontal // 默認是Vertical 在Horizontal時,元素是依次橫向擺放,Vertical時,依次豎向擺放
> 以佈局方式和frame 初始化UICollectionView
[[UICollectionView alloc] initWithFrame: collectionViewLayout: ]
> 設置背景色,純代碼實現時,UICollectionView默認背景色是黑色
.barckgroundColor
> 設置代理
.dataSource // 代理 UICollectionViewDataSource
.delegate // 代理 UICollectionViewDelegate ,UICollectionViewDelegateFlowLayout
> 註冊標識單元格UICollectionViewCell, UICollectionView Cell只能使用定製化的,而且必須註冊。
[collectionView registerNib: forCellWithReuseIdentifier:]
[collectionView registerClass: forCellWithReuseIdentifier:]
> 註冊標識分區表頭/表尾 UICollectionReusableView,建立時要手動設置其class
[collectionView registerNib: forSupplementaryViewOfKind: withReuseIdentifier: ]
/* forSupplementaryViewOfKind: 表示是爲表頭仍是表尾註冊,參數只有兩個可選值:UICollectionElementKindSectionHeader:表頭,UICollectionElementKindSectionFooter: 表尾 */
> 協議方法
- UICollectionViewDataSource
必須實現:
// 每一個分區條數(不是行數)
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;
// 數據綁定cell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
其餘方法:
// 返回分區數量
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;
// 數據綁定表頭/表尾:必須爲其設置尺寸纔可顯示,注意查看不一樣scrollDirection下表頭的展示
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;
- UICollectionViewDelegateFlowLayout
// 返回分區表頭尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
// 返回分區表尾尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:
(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;
// 返回每條的尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
// 返回每一個分區四周的外間距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
// 返回每一個分區內最小行間距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
// 返回每一個分區內條目之間最小內部距離
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
-UICollectionViewDelegate
// 條被選中:注意被選中的背景色,只能自定義selectedBackgroundView,且設置後,不能設置cell的背景色,不然沒法看到點擊選中效果
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;
// 條被反選
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;