在XIB文件中添加带有动态内容的UITableView

时间:2013-01-04 10:20:35

标签: uitableview interface-builder xib

是否可以添加UITableView(不是Table View Controller,而是在另一个视图中添加 TableView )并将其内容设置为"Dynamic Prototype" XIB file

UITableView内的视图控制器中添加storyboard时,此方法可以正常工作。但是,当我尝试在XIB文件中执行相同操作时,我无法将其内容设置为"Dynamic Prototype"

2 个答案:

答案 0 :(得分:4)

<强>更新

最近考虑这个问题,有一个相当直接的解决方案,即使用容器视图模式。

  1. 基本上,将容器视图添加到xib(或故事板)。
  2. 选择默认情况下附加到容器视图的视图控制器。
  3. 删除选定的视图控制器并将普通uitableviewcontroller拖到IB画布上。
  4. 接下来,控制 - 从容器视图拖动到uitableviewcontroller,然后选择“嵌入”&#39;从可用的segues类型。
  5. 根据自己的喜好调整容器视图大小,并为表视图控制器创建相应的代码文件。
  6. uitableviewcontroller重构为单独的storyboard / xib。
  7. 注意 - 表视图控制器可以作为视图控制器的子视图控制器访问,该控制器在代码中保存容器视图。

    为什么这是正确的模式? 1个故事板,1个控制器。 TableView拥有它自己的控制器,因为它足够复杂,可以保证单独的控制器。使用容器视图模式可以维护单个责任模式。避免控制器臃肿。

    原始答案的解决方法

    如果您调整了桌面视图的大小,请注意其中的问题; xml将由Xcode重新生成,并要求您重新添加该属性。我已确认此编辑仍适用于9.3+版本。 https://github.com/mingsai/test-stub-tableviewdynamic-inxib.git可以使用示例存根。

    原始答案

    1. 打开文件导航器
    2. 右键单击YourCustomView.xib文件
    3. 打开为&gt;源代码
    4. openas

      1. 找到以XML开头的XML

      tableview-xml

      1. 在XML tableview标记内找到样式属性
      2. 在样式标记之前留出空格,粘贴 dataMode="prototypes"

答案 1 :(得分:2)

对此不是100%肯定,但我认为没有办法在UIB文件中将UITableView内容设置为“Dynamic Prototype”。

但是,您可以通过创建另一个名为“MyTableViewCell.xib”的XIB文件来实现相同的功能,该文件只包含UITableViewCell,为单元格提供标识符,转到文件所有者,并在身份检查器中将其设置为相同的视图控制器类作为表视图xib,然后在视图控制器中创建一个IBOutlet,如下所示:

 @property (nonatomic, assign) IBOutlet UITableViewCell *customCell;

然后在XIB中,单击文件所有者并按住Ctrl键并拖动到uitableviewcell并将单元格的出口设置为“customCell”属性。

(如果您在图形编辑器的左下角找到一个看起来像一个圆圈内的播放按钮的按钮,点击它,然后在该列中拖动),这可能会更容易。< / p>

毕竟,在cellForRowAtIndexPath中使用类似这样的代码:

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

    static NSString *CellIdentifier = @"CustomCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];

        cell = customCell;
    }

    // Other cell configurations....
}

希望有意义并满足您的需求!