Table ViewとCollectionViewの違い

4890 ワード

原博さんも、私のブログです。


1、協議に従う:


UITableView: UITableViewDataSource,UITableViewDelegate UIcollectionView: UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout

2、登録cell:


tableviewはcellcollectionViewを登録せずにcellを登録する必要があります.そうしないとクラッシュします.
① UITableView: [tableView dequeueReusableCellWithIdentifier:]メソッドでcellを作成するには、cellを登録する必要はありませんが、cellが空であることを考慮し、対応する処理を行う必要があります.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellID"];
    }
    cell.textLabel.text = @"system cell";
    return cell;
}

次のコードを使用してcellを作成する場合は、cellを登録する必要があります.そうしないとcrashになります.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID" forIndexPath:indexPath];

注意:cellが登録されている場合-(UItableView*)tableView:(UItableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPathメソッドでcellが空の場合を処理する必要はありません.
② UICollectionView:
cellを登録する必要があり、cellが空の場合を処理する必要はありません.
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CustomCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCollectionViewCell" forIndexPath:indexPath];
return cell;
}

3、CollectionView固有の属性:


UIcollectionViewFlowLayoutオブジェクト
現在のCollectionViewからのsectionの上下4方向のオフセット量を制御するsectionInsetプロパティがあります.
行間隔(minimumLineSpacing)と列間隔(minimumInteritemSpacing)のプロパティがあります.(itemSize TableViewに似たrowHeightは後述しない)開発ではsectionInset:幅375の画面を十分に利用でき、1行に3つのwidth=100のitemを表示し、列間隔を0にする必要がありますが、どのように設定しますか?a>collectionViewを初期化できる場合は幅を300に設定します.b>設定sectionInset = UIEdgeInsetsMake(0, 37.5, 0, 37.5);

4、まとめ:


cellを作成するにはforIndexPath:付きの方法でcellを登録する必要があります.cellは既に登録されており、cellが空であると判断する必要はありません.