原文
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 可以用默認的
其他倒是都差不多