如何将UITableView作为子视图添加到xib中的UIView?
问题描述:
我有一个使用xib
文件构建的自定义视图。在这个自定义视图中,有一个UIView
,我想在其中添加一个静态的UITableView
作为子视图。此处显示的UITableView
出现在storyboard
中,并与UITableViewController
相关联。我做了以下内容:如何将UITableView作为子视图添加到xib中的UIView?
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
变量,我可以看到表格。
UPDATE
我意识到自己的做法是不是一个好一个。
我实现我希望通过我做的查看和UITableViewDataSource
一个UITableViewDelegate
子视图和编程方式创建一个UITable
和所需TableViewCell
结果。疯狂的代码量!
答
此处显示的UITableView出现在故事板上并与UITableViewController相关联。
在这种情况下,您所做的是完全非法的,这就是为什么它不起作用。您不能只调用instantiateViewControllerWithIdentifier
,抓住视图控制器的视图,并将该视图填入与addSubview
的接口。
毕竟,想一想:如果你这样做,发生什么事情的视图控制器?它不存在,而你有一个完全没有功能的观点。
还有就是你需要为了使TableController一个子视图控制器的self
(当前视图控制器做了严格的舞蹈 - 和你没有做舞蹈
有关的细节跳舞,看到我的答案在这里:http://stackoverflow.com/a/8746580/341994这是在2012年,但规则并没有改变,按照他们 - 在这里它是在现代Swift:https: //github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch06p316containerController/ch19p631containerController/ViewController.swift – matt
有没有其他办法可以访问那个UITableView?我在xib文件中找不到容器视图所以我不得不诉诸这个马dness。正如你所看到的,我非常渴望完成这件事。 – JadeSync
我不知道你的意思是“任何其他方式”。我所建议的很容易。我向你展示了代码。为什么不这样做呢?您只需添加几行代码即可。 – matt