ContainerView 添加出口

ContainerView add outlet

我有一个 ViewController,其中一个 Container View 嵌入了 TableViewController

现在我想访问 ViewController 中的 TableView,我该如何为它创建一个出口?

我尝试将容器视图添加为出口,但我无法访问嵌入式 TableViewController

在子视图控制器中创建出口并使用 self.childViewControllers.lastObject 访问它(假设您只有一个子视图,否则使用 objectAtIndex:)

你不能直接创建一个 outlet,因为 table 视图在不同的场景(视图控制器)中,但是你可以访问 table 视图,一旦你有对 UITableViewController实例。有几种不同的方法可以做到这一点。

首先,您可以使用 UIViewController 子类的 childViewControllers 属性。如果你知道只有一个 child 那么你可以直接访问它,否则你需要确定哪个是正确的 child,比如通过遍历数组。

let myTableViewController = self.childViewControllers[0] as! UITableViewController
let theTableView = myTableViewController.tableView

第二个选项是在嵌入转场期间访问 UITableViewController。如果你点击故事板中的嵌入转场,你可以给它一个标识符,就像任何其他转场一样。然后你可以实现 prepareForSegue 并获取嵌入式 UITableViewController 实例 -

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "tableviewEmbed") {
        let myTableViewController = segue.destinationViewController as! UITableViewController
        let theTableView = myTableViewController.tableView
    }
}

就我个人而言,我更喜欢第二种方法,因为我认为它是 'cleaner'