之前学习TableView的时候,都是把它作为唯一的View呈现的,所以整个Scene的View Controller就是TableViewController。
如果需要在界面中集合其他的控件(View),整个ViewController就不能采用TableViewController了,同时也不能让这个View Controller实现DataSource或者Delegate,因为还有其他的控件。
解决方案就是引入一个 ContainerView,将其通过Segue指向另外一个TableViewController,在后者中,显示一个表格。结构如下:

在ViewController初始化后,会自动调用Segue,所以可以在对应的prepare(for segue: UIStoryboardSegue, sender: Any?)中,采用互相引用的方式,设置Table View Controller,将其父控制器设置为View Controller ( ContainerView 只是一个桥梁),这样 TableViewController 就可以在对应的表格类方法中,引用View Controller中各类Model数据,显示对应的表格了。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "initTableViewController" {
TableViewController = segue.destination as! TableViewController
TableViewController.containerViewController = self
}
}
这里 Segue的identifier 是 initTableViewController。
这样显示的结果就是

网友评论