如何将 UITableView 作为子视图添加到 xib 中的 UIView?

Posted

技术标签:

【中文标题】如何将 UITableView 作为子视图添加到 xib 中的 UIView?【英文标题】:How to add a UITableView as a subview to a UIView in xib? 【发布时间】:2017-01-23 18:31:10 【问题描述】:

我有一个使用xib 文件构建的自定义视图。在这个自定义视图中,有一个UIView,我想在其中添加一个静态UITableView 作为子视图。此处显示的UITableView 出现在storyboard 上,并与UITableViewController 相关联。我做了以下事情:

let vc = (UIStoryboard(name: "Main", bundle: nil))
    .instantiateViewControllerWithIdentifier("tableController") as! TableController
vc.loadViewIfNeeded()
table = vc.table // this is an outlet, I'm sure it is not nil
table.delegate = vc
table.dataSource = vc
table.backgroundColor = UIColor.greenColor()
containerView.addSubview(table)

我可以在自定义视图中看到绿色背景,但表格单元格没有显示

我知道表格的出口不是零,因为在调试时,如果我使用控制台下方的Quick Look 图标检查table 变量,我可以看到表格。

更新

我意识到我的方法并不好。

通过使我的视图成为UITableViewDataSourceUITableViewDelegate 的子视图并以编程方式创建UITable 和必需的TableViewCell,我实现了我想要的结果。大量的代码!

【问题讨论】:

【参考方案1】:

此处显示的 UITableView 出现在情节提要上并与 UITableViewController 相关联。

在这种情况下,您所做的是完全非法的,这就是它不起作用的原因。您不能只调用instantiateViewControllerWithIdentifier,获取视图控制器的视图,然后使用addSubview 将视图填充到界面中。

毕竟,想想看:如果你这样做,视图控制器会发生什么?它不复存在了,你得到了一个完全没有功能的视图。

为了使 TableController 成为self(当前视图控制器)的子视图控制器,您需要进行严格的操作,而您并没有这样做。

【讨论】:

有关舞蹈的详细信息,请在此处查看我的答案:***.com/a/8746580/341994 那是在 2012 年,但规则根本没有改变。跟着他们。 — 在现代 Swift 中演示:github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 还有其他方法可以访问该 UITableView 吗?我在 xib 文件中找不到容器视图,所以我不得不求助于这种疯狂。如您所见,我非常渴望完成这项工作。 我不知道您所说的“任何其他方式”是什么意思。我的建议很容易。我已经给你看了代码。为什么不去做呢?您只需要在已有的基础上添加几行代码。 我只有一个视图控制器,那就是 UITableViewController。我要嵌入此表的视图位于一个 xib 文件中,该文件的所有者是 UIView 子类。所以实际上没有父视图控制器。只有父视图。 “任何其他方式”是指任何其他方法或技巧 那么你需要另一个视图控制器。如果您“将此表嵌入”到“视图”中,则该视图属于某个视图控制器。那么,that 视图控制器不能是表视图控制器;表视图控制器拥有 table 而没有别的。因此,这个故事中必须有两个视图控制器,并且它们必须像我在回答中所说的那样处于适当的父子关系。

以上是关于如何将 UITableView 作为子视图添加到 xib 中的 UIView?的主要内容,如果未能解决你的问题,请参考以下文章

实现 UITableView (Slave) 的动态高度,它作为子视图添加到另一个具有动态高度的 UITableView (Master) 的自定义单元格中

将 UISearchBar 作为子视图添加到 tableView 标题中

ios7将刷新控件添加到表视图作为子视图后,它增加了额外的空间

编辑搜索栏时将 UITableView 添加到子视图

使用自动布局将子视图添加到 UITableView 不会设置其框架

向 UITableView Header 添加子视图的宽度错误?