使用多个自定义UITableViewCells

时间:2011-08-08 12:51:44

标签: ios objective-c uitableview

我正在尝试实现分组样式的UITableView,例如Contact apps detailedView。我希望最顶层的单元格是透明的,并在底部有一个UISegemtedControl。

当我尝试创建两种不同类型的自定义单元格时,即使我使用两个不同的cellIdentifier,也只会加载第一个自定义单元格。

会感谢som的指导。或者针对同一主题的一些很好的教程提示。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    /*
    UIView *backView = [[UIView alloc] initWithFrame:CGRectZero];
    backView.backgroundColor = [UIColor clearColor];
    cell.backgroundView = backView;
    [backView release];
    */

    static NSString *cellIdentifier1 = @"DetailCellStyle1";
    static NSString *cellIdentifier2 = @"DetailCellStyle2";

    if (indexPath.section == 0) {

        // Load from nib
        DetailCellViewController *cell = (DetailCellViewController *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
        if (cell == nil) {
            NSArray *topLevelObjects = [[NSBundle mainBundle]
                                        loadNibNamed:@"DetailCellView" 
                                        owner:nil 
                                        options:nil];

            for (id currentObject in topLevelObjects) {
                if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                    cell = (DetailCellViewController *) currentObject;
                    break;
                }
            }
        }

        return cell;
    }
    else  {
        // Load from nib
        DetailCellViewController2 *cell = (DetailCellViewController2 *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier2];
        if (cell == nil) {
            NSArray *topLevelObjects = [[NSBundle mainBundle]
                                        loadNibNamed:@"DetailCellView" 
                                        owner:nil 
                                        options:nil];

            for (id currentObject in topLevelObjects) {
                if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                    cell = (DetailCellViewController2 *) currentObject;
                    break;
                }
            }
        }

        return cell;
    }

    return nil;
}

2 个答案:

答案 0 :(得分:2)

通过在“DetailCellView”笔尖中取第UITableViewCell类型的第一个对象,以完全相同的方式加载单元格1和单元格2。因此,在这两种情况下,您都会获得相同的单元格。

答案 1 :(得分:0)

嗯,老实说我也不确定,但是,当单元格为零时,加载调用只能提高效率,可能会尝试加载第二个作为 if(cell == nil)调用的其他内容。因为在代码的最后,你将它再次设置为n ...所以也许: - )