搜尋

首頁  >  問答  >  主體

ios - CollectionView.xib中创建多个nibCell,用的时候如何使用??


如图:我在collection.xib中创建了2个cell,定义了不同的identifier,

使用的时候:

     NSArray *nibArrays = [[UINib nibWithNibName:@"LongCell" bundle:nil] instantiateWithOwner:nil options:nil];
    [collectionView registerClass:[[nibArrays objectAtIndex:0] class] forCellWithReuseIdentifier:@"LongCellFirst"];
    [collectionView registerClass:[[nibArrays objectAtIndex:1] class] forCellWithReuseIdentifier:@"LongCellSecond"];
#pragma mark - UICollectionViewDelegate DataSource -
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.item % 2 == 0) {
        LongCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LongCellFirst" forIndexPath:indexPath];

        return cell;
    }else {
        LongCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LongCellSecond" forIndexPath:indexPath];
        return cell;
    }
}

这样能运行,但是取出的cell都是上面什么也没有。
是我注册cell不对吗??还是因为不能这样用?tableViewCell.xib就可以这样搞啊?
tableView.xib中创建多个cell
请大神解释啊。。。。。。

天蓬老师天蓬老师2772 天前850

全部回覆(6)我來回復

  • 大家讲道理

    大家讲道理2017-04-18 09:31:28

    你是用nib創建的啊,不應該用registerNib來註冊嗎?為什麼用regClass。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 09:31:28

    xib檔案讀取錯了
    NSArray *nibArrays=[[NSBundle mainBundle]loadNibNamed:@"LongCell" owner:nil options:nil];

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 09:31:28

    兩種方法:

    1. 拆成兩個 xib ,每次 registerNib: 一個;

    2. 合成一個,但是自己初始化實例:

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
      {
          if (indexPath.row % 2) {
              UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LongCellFirst"];
              if (!cell) {
                  cell = [[UINib nibWithNibName:@"LongCell" bundle:nil] instantiateWithOwner:self
                                                                                     options:nil].firstObject;
              }
      
              return cell;
          }
          else {
              UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LongCellSecond"];
              if (!cell) {
                  cell = [[UINib nibWithNibName:@"LongCell" bundle:nil] instantiateWithOwner:self
                                                                                     options:nil].lastObject;
              }
      
              return cell;
          }
      }

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:31:28

    建議一個 xib 檔案對應一個 View,沒必要省文件吧

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:31:28

    依照上面說到的方法,可以顯示cell,但cell裡的控制設定時沒有效果,請問樓主解決了嗎?

    回覆
    0
  • 黄舟

    黄舟2017-04-18 09:31:28

    在cell中關聯cell上的控制項時,如果你不做修改。你所有關聯的控制項都預設為cell1上的控制項。通俗的講也就是連線時預設的都是第一個cell上的控制

    回覆
    0
  • 取消回覆