its*_*e69 9 interface-builder uitableview xib
有没有办法在另一个视图中添加UITableView(不是a Table View Controller,而是一个TableView)并将其内容设置"Dynamic Prototype"为XIB file?
当UITableView在视图控制器中添加一个时,这可以正常工作storyboard.但是,当我尝试在XIB文件中执行相同操作时,我无法将其内容设置为"Dynamic Prototype".
更新
最近在思考这个问题,有一个相当简单的解决方案,那就是使用容器视图模式。
uitableviewcontroller拖入 IB 画布。uitableviewcontroller并从可用的 segues 类型中选择“嵌入”。 uitableviewcontroller为单独的故事板/xib。注意- 表视图控制器可以作为在代码中保存容器视图的视图控制器的子视图控制器进行访问。
为什么这是正确的模式?1 个故事板,1 个控制器。TableView 有它自己的控制器,因为它足够复杂,需要一个单独的控制器。使用容器视图模式允许您维护单一职责模式。避免控制器膨胀。
原始答案的解决方法
如果您调整 tableview 的大小,请注意一个问题;xml 将由 Xcode 重新生成,并要求您重新添加该属性。我已经确认这个编辑在 9.3+ 版本中仍然有效。https://github.com/mingsai/test-stub-tableviewdynamic-inxib.git提供了一个示例存根。
原答案
tableview标记中找到 style 属性dataMode="prototypes"小智 3
对此不是 100% 确定,但我认为没有办法在 XIB 文件中将 UITableView 内容设置为“动态原型”。
但是,您可以通过创建另一个 XIB 文件(名为“MyTableViewCell.xib”)来实现相同的功能,该文件仅包含 UITableViewCell,为单元格提供标识符,转到文件的所有者并在身份检查器中将其设置为相同的视图控制器类作为您的表视图 xib,然后在您的视图控制器中创建一个 IBOutlet,如下所示:
@property (nonatomic, assign) IBOutlet UITableViewCell *customCell;
Run Code Online (Sandbox Code Playgroud)
然后在 XIB 中,单击文件的所有者并按住 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....
}
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的并且适合您的需求!