为什么我的UITableView不使用原型进行单元格?

时间:2014-02-18 06:22:42

标签: ios uitableview

所以这是我的代码,它不起作用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier;
    if (indexPath.row == 0)
    {
        // buttonCell
        CellIdentifier = @"buttonCell";
        buttonCell *cell = (buttonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.startAddressLabel.text = @"something";

        //cell config
        //debug
        NSLog(@"indexPath.row: %d", indexPath.row);
        NSLog(@"Cell Identifier: %@", CellIdentifier);

        return cell;
    } else if (indexPath.row == 1)
    {
        //mutableCaptionCell date&time
        CellIdentifier = @"mutableCaptionCell";
        mutableCaptionCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        //cell config
        cell.infoLabel.text = @"Время и дата";
        cell.contentLabel.text = @"";

        //debug
        NSLog(@"indexPath.row: %d", indexPath.row);

        return cell;

    } else if (indexPath.row == 2)
    {
        //mutableCaptionCell tax
        CellIdentifier = @"mutableCaptionCell";
        mutableCaptionCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        //cell config
        cell.infoLabel.text = @"Тариф";
        cell.contentLabel.text = @"";

        //debug
        NSLog(@"indexPath.row: %d", indexPath.row);

      return cell;
    } else if (indexPath.row == 3)
    {
        //mutableCaptionCell car
        CellIdentifier = @"mutableCaptionCell";
        mutableCaptionCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        //cell config
        cell.infoLabel.text = @"Выбор машины на карте";
        cell.contentLabel.text = @"";

        //debug
        NSLog(@"indexPath.row: %d", indexPath.row);

        return cell;
    } else if (indexPath.row == 4)
    {
        //wishCell wishlist
        CellIdentifier = @"wishCell";
        WishCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        //cell config
        cell.infoLabel.text = @"Пожелания";
        cell.contentLabel.text = @"";

        //debug
        NSLog(@"indexPath.row: %d", indexPath.row);

        return cell;
    } else
    {
        //debug
        NSLog(@"indexPath.row: %d", indexPath.row);
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"mutableCaptionCell" forIndexPath:indexPath];

        // Configure the cell...
        cell.textLabel.text = @"ERROR CELL";

        //debug
        //NSLog(@"indexPath.row: %d", indexPath.row);

        return cell;

        ;
    }

}

我已经为每个原型说过 UITableViewCell 的子类,重用标识符与每个原型匹配,但我在运行时看到的看起来像UITableView不使用这些原型。例如,第一个单元格必须是带有两个按钮的巨大单元格,而是显示为空白。我NSLoged所有,并记录显示:

2014-02-18 10:13:51.587 app[1624:70b] indexPath.row: 0
2014-02-18 10:13:51.590 app[1624:70b] Cell Identifier: buttonCell
2014-02-18 10:13:51.594 app[1624:70b] cell: <buttonCell: 0x8b95e00; baseClass = UITableViewCell; frame = (0 0; 320 44); autoresize = W; layer = <CALayer: 0x8b96000>>
2014-02-18 10:13:51.600 app[1624:70b] indexPath.row: 1
2014-02-18 10:13:51.603 app[1624:70b] indexPath.row: 2
2014-02-18 10:13:51.606 app[1624:70b] indexPath.row: 3
2014-02-18 10:13:51.610 app[1624:70b] indexPath.row: 4

但TableView仍然没有使用正确的原型。

我正在尝试使用动态原型,因为我需要在运行时更改一些单元格高度,可能有一种方法可以使用静态单元格吗?

  

旁注:我使用Xcode 5 for iOS 7

2 个答案:

答案 0 :(得分:1)

我的猜测是,你没有初始化你的单元格,dequeueReusableCellWithIdentifier还不够。它重用已经创建的单元格,因此如果出列cell结果,则应首先分配nil

可能:

if (indexPath.row == 0)
{
    // buttonCell
    CellIdentifier = @"buttonCell";
    buttonCell *cell = (buttonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


   if(!cell)
   {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier];
   }

    cell.startAddressLabel.text = @"something";

    //cell config
    //debug
    NSLog(@"indexPath.row: %d", indexPath.row);
    NSLog(@"Cell Identifier: %@", CellIdentifier);

    return cell;
}

或使用IB设计的称重传感器:

if (indexPath.row == 0)
{
    // buttonCell
    CellIdentifier = @"buttonCell";
    buttonCell *cell = (buttonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


   if(!cell)
   {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:nil options:nil] objectAtIndex:0];   // Assign reuseIdentifier from IB
   }

    cell.startAddressLabel.text = @"something";

    //cell config
    //debug
    NSLog(@"indexPath.row: %d", indexPath.row);
    NSLog(@"Cell Identifier: %@", CellIdentifier);

    return cell;
}

希望它有所帮助!

答案 1 :(得分:0)

如果细胞数量有限,最好使用静态细胞。当我们滚动桌面视图时,细胞将一次又一次地铺设。所花费的时间将会非常少,无论它拾取的是什么细胞,它都显示出与所有细胞相同的高度...我建议尽可能选择静态细胞或不同的表格....