将行添加到从Storyboard构建的UITableView

时间:2012-07-20 13:19:55

标签: ios uitableview uikit

我有一个静态UITableView从故事板构建,效果很好。我想以编程方式填写第一类,来自用户定义的文件

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

据我了解,从故事板构建的UITableView的默认行为是将nib文件用作隐式datasource。如果我将自定义类用作datasource,则我的第二部分不起作用。我想到了两种可能的解决方法:

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

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

2 个答案:

答案 0 :(得分:1)

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

  • 静态
  • 动态

您目前正在使用前者。您可以在故事板中定义所有内容,并且只需很少的代码。

但你需要改变后者。

您仍然可以将UITableViewCell保留在故事板中;没有必要在代码中执行此操作(尽管如果它可以使事情变得更容易)。您可以使用“重用标识符”来引用模板单元格。

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

从静态变为动态是一种繁琐的转变。我一直有意义提出雷达,因为我确信Xcode可以让它变得更容易......

答案 1 :(得分:1)

我会使用动态原型单元格。然后,我会将ViewController设置为delegatedataSource。然后,我将创建UITableViewCell的自定义子类,并将第二部分的元素连接到自定义IBOutlet中的UITableViewCell

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

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

-(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.
    }
}