-1

我有以下内容,但由于范围仅限于 if 语句,cellForRowAtIndexPath因此无法编译。cell写这个的正确方法是什么?

int val=indexPath.row % 2;
if(val==0) {
    TRCell *cell = (TRCell*)[tableView dequeueReusableCellWithIdentifier:@"myCell"];
    cell.topLabel.text = @"whatever";
    cell.subLabel.text = @"down below";
} else {
    TROddCell *cell = (TROddCell*)[tableView dequeueReusableCellWithIdentifier:@"cell2"];
    cell.subLabel.text = @"down below in sub";
}

return cell;
4

3 回答 3

3

你有两个选择:

1)将您的语句保留return在原处,但在语句cell之前if声明,以便它与您的return语句在同一范围内。

int val=indexPath.row % 2;
UITableViewCell *cell;
if(val==0){
    TRCell *trCell = (TRCell*)[tableView dequeueReusableCellWithIdentifier:@"myCell"];
    trCell.topLabel.text = @"whatever";
    trCell.subLabel.text = @"down below";
    cell = trCell;
} else{
    TROddCell *trOddCell = (TROddCell*)[tableView dequeueReusableCellWithIdentifier:@"cell2"];
    trOddCell.subLabel.text = @"down below in sub";
    cell = trOddCell;
}

return cell;

2)cell从定义的范围返回。

int val=indexPath.row % 2;
if(val==0){
    TRCell *cell = (TRCell*)[tableView dequeueReusableCellWithIdentifier:@"myCell"];
    cell.topLabel.text = @"whatever";
    cell.subLabel.text = @"down below";
    return cell;
} else{
    TROddCell *cell = (TROddCell*)[tableView dequeueReusableCellWithIdentifier:@"cell2"];
    cell.subLabel.text = @"down below in sub";
    return cell;
}
于 2013-08-04T13:31:59.700 回答
1

您还可以从 if 块中返回您的单元格。

顺便说一句,如果单元格在其他方面相等,动态设置颜色并使用相同的单元格子类会更优雅。

cell.contentView.backgroundColor = indexPath.row % 2 ?
   kLightCellBackgroundColor : kDarkCellBackgroundColor;
于 2013-08-04T07:37:04.523 回答
1

很简单,正如你所说,这是一个范围问题。只需将 return 拉出并将其添加到每个 if 语句中。

int val=indexPath.row % 2;
if(val==0){
    TRCell *cell = (TRCell*)[tableView dequeueReusableCellWithIdentifier:@"myCell"];
    cell.topLabel.text = @"whatever";
    cell.subLabel.text = @"down below";

    return cell;
}else{
    TROddCell *cell = (TROddCell*)[tableView dequeueReusableCellWithIdentifier:@"cell2"];
    cell.subLabel.text = @"down below in sub";

    return cell;
}
于 2013-08-04T13:22:39.913 回答