10

有没有办法添加一个UITableView(不是一个Table View Controller,而是另一个视图中的 TableView)并将其内容设置为"Dynamic Prototype"一个XIB file

在. UITableView_ storyboard但是,当我尝试在 XIB 文件中执行相同操作时,我无法将其内容设置为"Dynamic Prototype".

4

2 回答 2

6

更新

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

  1. 基本上,将容器视图添加到您的 xib(或情节提要)。
  2. 选择默认附加到容器视图的视图控制器。
  3. 删除选定的视图控制器并将法线uitableviewcontroller拖到 IB 画布上。
  4. 接下来,从容器视图中按住 controluitableviewcontroller并从可用的 segues 类型中选择“嵌入”。
  5. 根据您的喜好调整容器视图的大小,并为表视图控制器创建适当的代码文件。
  6. 重构uitableviewcontroller为单独的故事板/xib。

注意- 表格视图控制器将可作为视图控制器的子视图控制器访问,该视图控制器在代码中保存容器视图。

为什么这是正确的模式?1 个故事板,1 个控制器。TableView 有它自己的控制器,因为它足够复杂,需要一个单独的控制器。使用容器视图模式允许您维护单一职责模式。避免控制器膨胀。

原始答案的解决方法

如果您调整表格视图的大小,请注意一个问题;xml 将由 Xcode 重新生成并要求您重新添加属性。我已确认此编辑在 9.3+ 版本中仍然有效。示例存根可在https://github.com/mingsai/test-stub-tableviewdynamic-inxib.git获得。

原始答案

  1. 打开文件导航器
  2. 右键单击 YourCustomView.xib 文件
  3. 打开方式 > 源代码

开放式

  1. 查找以开头的 XML

表视图-xml

  1. 在 XMLtableview标记中找到样式属性
  2. 在样式标签前留一个空格,粘贴进去 dataMode="prototypes"
于 2017-12-31T12:53:03.193 回答
3

对此不是 100% 确定,但我认为没有办法在 XIB 文件中将 UITableView 内容设置为“动态原型”。

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

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

然后在 XIB 中,单击 File's Owner 并按住 control 拖动到 uitableviewcell 并将单元格的出口设置为“customCell”属性。

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

毕竟,在 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....
}

希望这有意义并适合您的需求!

于 2013-07-27T21:31:11.343 回答