indexPath.section在“cellForRowAtIndexPath:”中的奇怪行为

时间:2012-01-12 23:06:53

标签: iphone objective-c ios

我对indexPath.section方法中的cellForRowAtIndexPath:有一个奇怪的问题。

我有一个包含4个部分的分组tableview,我正在尝试为第3部分应用自定义UITableViewCell,但它不起作用。

当我尝试if(indexPath.section==0){...}时,它会起作用(对于section==1section==2也是如此)但section==3失败了。 (?)

我不知道为什么,这没有任何意义..有人已经有这个(奇怪的)问题吗?

当我尝试if(indexPath.row==0){...}时,它适用于所有4个部分..所以......?!

这是我的代码:

//ViewController.h
import "DirectionsTableViewCell.h"
DirectionsTableViewCell *directionsCell; // customized UITableViewCell

//ViewController.m
if (indexPath.section==3) {
        static NSString *CellIdentifier = @"directionsCell";

        DirectionsTableViewCell *cell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell == nil) {
            [[NSBundle mainBundle] loadNibNamed:@"DirectionsTableViewCell" owner:self options:nil];
            cell = directionsCell;
        }

        return cell;
    }
    else {
        static NSString *CellIdentifier = @"defaultCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }

        cell.textLabel.text = @"Test";

        return cell;
    }


问题解决了!

我刚刚添加了if(indexPath.row),它运行正常。

最后你得到了这个:

if(indexPath.section==3) {
   if(indexPath.row) {
      static NSString *CellIdentifier = @"directionsCell";

      DirectionsTableViewCell *cell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if(cell == nil) {
          [[NSBundle mainBundle] loadNibNamed:@"DirectionsTableViewCell" owner:self options:nil];
          cell = directionsCell;
      }

      return cell;
   }
}

1 个答案:

答案 0 :(得分:1)

好吧,你永远不会在if(cell == nil)内分配DirectionsTableViewCell。

在代码的这一部分:

DirectionsTableViewCell *cell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell == nil) {
            [[NSBundle mainBundle] loadNibNamed:@"DirectionsTableViewCell" owner:self options:nil];
            cell = directionsCell;
        }

您永远不会分配DirectionsTableViewCell类型的单元格,以便稍后重复使用。我还注意到你有一个名为directionsCell的名为DirectionsTableViewCell的ivar。除非您在其他位置分配和设置,否则cell = directionsCell最终会为您的cell

分配一个零对象

请尝试使用此代码,看看它是否有效:

static NSString *CellIdentifier = @"directionsCell";

directionsCell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(directionsCell == nil) {
        directionsCell = [[DirectionsTableViewCell alloc] init]; //Or whatever your initializer is
    }

    return directionsCell;