2

我没有使用故事板,它是 iOS 6。

当所有单元格都是相同类型时,我知道该怎么做,但我需要一个包含多种单元格类型的分组表视图。举个例子,假设第一个单元格需要是UITableViewCellStyleValue1,第二个单元格需要是UITableViewCellStyleSubtitle,第三个单元格是自定义单元格(UITableViewCell具有 xib 的子类,因此可以与registerNib:forCellReuseIdentifier:.

大多数情况下,我不确定构建tableView:cellForRowAtIndexPath:. 但我不确定是否应该注册自定义单元格或全部。

做这个的最好方式是什么?

4

2 回答 2

3

你走在正确的道路上。由于您的自定义单元格正在其他地方使用,因此 xib 是加载它的好地方。至于实现,你可以做这样的事情。

假设您的表格视图是“静态的”并且有三个单元格,您可以在以下位置注册您的自定义笔尖viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    UINib *customCellNib = [UINib nibWithNibName:@"CustomCell" bundle:nil];
    [self.tableView registerNib:customCellNib forCellReuseIdentifier:@"CustomIdentifier"]
}

然后在cellForRowAtIndexPath:

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

    UITableViewCell *cell = nil;

    if(indexPath.row == 0) {

        cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier1"];

        if(cell == nil) {

            cell = [[UITableViewCell alloc]  initWithStyle:UITableViewCellStyleValue1
                                           reuseIdentifier:@"CellIdentifier1"];
        }
    }
    /* Cell 2 ommited for brevity */
    else if(indexPath.row == 2) {

        //Just to demonstrate the tableview is returning the correct type of cell from the XIB
        CustomCell *customCell = [tableView dequeueReusableCellWithIdentifier:@"CustomIdentifier"];
        cell = customCell;
    }

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}

最后在 IB 中为 Xib 设置正确Identifier的单元格。

Xib - IB 中的单元格

更新

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

    if(indexPath.row == 0) {
        cell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row];
    }
    else {

        //custom cell here
        //cell.textfield.text = @"blah blah";
    }
}

配置单元格方法在某种程度上是用于主要使用NSFetchedResultsController(及其使用的委托)放置的 tableview 单元格的约定

这只是一种使用适当内容重置重用单元格的便捷方法,并且cellForRowAtIndexPath:更易于阅读。我什至制作了多个版本的 configureCellconfigureCustomCell1:atIndexPath来增加可读性。

希望这可以帮助!

于 2013-04-03T03:11:44.687 回答
0

如果您使用的是静态表,则不需要重用标识符或其他任何东西,因为不会再使用任何单元格。只需将表格设置为“分组”样式的“静态单元格”并设置所需的部分数。您可以单击“表格视图部分”并设置该部分中有多少行(并设置您可能想要的任何页眉/页脚)。

故事板示例

然后根据需要配置单元格。您可以选择默认单元格或将单元格设为“自定义”并从对象库中拖动 UI 组件。您可以在静态表格单元格中设置IBOutletsIBActions设置组件,就像在普通视图中设置组件一样。

配置单元

于 2013-04-02T15:37:49.327 回答