如何在一个UITableView中调用不同的自定义单元格?

时间:2015-08-07 16:52:42

标签: objective-c uitableview

当我尝试运行此程序时,出现错误:“控件可能会达到非空函数的结束”。你知道如何解决这个问题吗?当我尝试在最后两个闭合括号之间进行返回时,它显示另一个错误。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 UILabel *label;

 if (indexPath.section == 0 && indexPath.row == 0) {

    static NSString *CellIdentifer1 = @"GameDetailsSetScoringCell";
    UITableViewCell *cell1 = [tableView    dequeueReusableCellWithIdentifier:CellIdentifer1];
            label = (UILabel *)[cell1 viewWithTag:0];
    label.text = [NSString stringWithFormat: @"Standard Set: 3 Sets"];
    return cell1;
}


if (indexPath.section == 1 && indexPath.row == 0) {
     static NSString *CellIdentifer2 = @"GameDetailsDateTimeCell";

    UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer2];

    label = (UILabel *)[cell2 viewWithTag:0];
    label.text = [NSString stringWithFormat: @"March 5, 2015 5:25"];
    return cell2; 
}
 if (indexPath.section == 2 && indexPath.row == 0) {

    static NSString *CellIdentifer3 = @"GameDetailsLocationCell";

    UITableViewCell *cell3 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer3];

    label = (UILabel *)[cell3 viewWithTag:0];
    label.text = [NSString stringWithFormat: @"Bridgewater, NJ"];
    return cell3;
 }

 if (indexPath.section == 3 && indexPath.row == 0) {

    static NSString *CellIdentifer4 = @"GameDetailsMatchModeCell";

    UITableViewCell *cell4 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer4];

    label = (UILabel *)[cell4 viewWithTag:0];
    label.text = [NSString stringWithFormat: @"Normal Mode"];
    return cell4;
}


  if (indexPath.section == 4 && indexPath.row == 0) {

    static NSString *CellIdentifer5 = @"GameDetailsAdCell";

    UITableViewCell *cell5 = [tableView dequeueReusableCellWithIdentifier:CellIdentifer5];

    label = (UILabel *)[cell5 viewWithTag:0];
    label.text = [NSString stringWithFormat: @"NO"];
    return cell5;

     }

  }

如果我尝试在最后两个右括号之间添加(返回单元格;)或甚至(返回cell1;),我会收到错误:

  

使用未声明的标识符'cell'   要么   使用未声明的标识符'cell1'

2 个答案:

答案 0 :(得分:2)

问题只是满足编译器的问题。 相信您正在涵盖所有可能的情况并在所有情况下返回一个单元格,但编译器不知道这一点。如果if条件的 none 成功,该怎么办?如果索引路径行 0怎么办?如果索引路径部分不是0到4,该怎么办?您可能认为这是不可能的,但编译器并不这么认为。在这种情况下你需要返回一个单元格。

答案 1 :(得分:0)

正如@matt +1所说,你必须为每个可能的案例返回一个值。当程序没有输入任何if范围时你不会这样做。好吧,你不可能这么想。但是这位漫画家不知道。

我修改了您的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UILabel *label;

    UITableViewCell *cell = nil;
    if (indexPath.section == 0 && indexPath.row == 0) {

        static NSString *CellIdentifer1 = @"GameDetailsSetScoringCell";
        UITableViewCell *cell = [tableView    dequeueReusableCellWithIdentifier:CellIdentifer1];
        label = (UILabel *)[cell viewWithTag:0];
        label.text = [NSString stringWithFormat: @"Standard Set: 3 Sets"];
    }
    else if (indexPath.section == 1 && indexPath.row == 0) {
        static NSString *CellIdentifer2 = @"GameDetailsDateTimeCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer2];

        label = (UILabel *)[cell viewWithTag:0];
        label.text = [NSString stringWithFormat: @"March 5, 2015 5:25"];
    }
    else if (indexPath.section == 2 && indexPath.row == 0) {

        static NSString *CellIdentifer3 = @"GameDetailsLocationCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer3];

        label = (UILabel *)[cell viewWithTag:0];
        label.text = [NSString stringWithFormat: @"Bridgewater, NJ"];
    }
    else if (indexPath.section == 3 && indexPath.row == 0) {

        static NSString *CellIdentifer4 = @"GameDetailsMatchModeCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer4];

        label = (UILabel *)[cell viewWithTag:0];
        label.text = [NSString stringWithFormat: @"Normal Mode"];
        return cell;
    }
    else if (indexPath.section == 4 && indexPath.row == 0) {

        static NSString *CellIdentifer5 = @"GameDetailsAdCell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer5];

        label = (UILabel *)[cell viewWithTag:0];
        label.text = [NSString stringWithFormat: @"NO"];
    }
    return cell;
}