0

我有一个UITableView从 Storyboard 构建的静态效果,效果很好。不过,我想从用户定义的文件中以编程方式填充第一个类别

简单地说,我想遍历数组中的所有字符串并将它们添加为第一类行的单元格。对于第二类,我在情节提要中定义了一系列稍微复杂的单元格(包含许多标签、文本字段、按钮和其他控件),我不想在代码中重新创建它们。

据我了解,UITableView从情节提要构建的默认行为是将nib文件用作隐式datasource. 如果我使用自定义类 as datasource,我的第二部分不起作用。我想到了两种可能的方法来解决这个问题:

  • 填写我的第一个类别datasource并将其余部分委托给nib文件。这可能吗?是否有一些方法可以以编程方式要求nib填写我的UITableView
  • 将我的故事板构建的单元格导出到代码中,然后将此代码粘贴到我的datasource. 这种方法的缺点是使我的第二类更难修改。

这两个选项之一是否可行?还有其他选择吗?

4

2 回答 2

1

使用 Storyboard 时有两种表格视图:

  • 静止的
  • 动态的

您目前使用的是前者。您可以在 Storyboard 中定义所有内容,并且代码很少。

但是您需要更改为后者。

您仍然可以将UITableViewCells 保留在 Storyboard 中;无需在代码中执行此操作(尽管如果它使事情变得更容易,您可以这样做)。您可以使用“重用标识符”引用模板单元格。

否则你几乎得到它。您需要编写代码来实现数据源和(可能)更多表视图委托的方法。

这是一种从静态到动态的巧妙切换。我一直想提高雷达,因为我确信 Xcode 可以让它更容易做......

于 2012-07-20T13:26:17.737 回答
1

我会使用动态原型单元。然后,我会设置ViewControlleras thedelegatedataSource. 然后,我将创建一个自定义子类,UITableViewCell并将第二部分的元素连接到IBOutletcustom 中的 s UITableViewCell

如果第一部分不能用一种通用单元类型完成,我也会UITableViewCell为该部分创建一个自定义子类。

然后我会使用该cellForRowAtIndexPath:方法来设置单元格,其中包含我想要的信息。因此,如果我使用的第一部分FirstSectionCell和我的第二部分用作我的SecondSectionCell自定义子类,则如下所示:UITableViewCellcellForRowAtIndexPath:

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

    if(indexPath.section==0)
    {
        FirstSectionCell *firstCell = [tableView dequeueReusableCellWithIdentifier:@"First Cell Prototype"];

        //Set up the first cell.

        return firstCell;
    } 
    else if(indexPath.section ==1)
    {
        SecondSectionCell *secondCell = [tableView dequeueReusableCellWithIdentifier:@"Second Cell Ptototype"];

        //Set up second cell.
        secondCell.someLabel.text = @"whatever";
        //etc.

        return secondCell;
    }
    else 
    {
        //if you have another section handle it here.
    }
}
于 2012-07-20T13:30:18.870 回答