如何在嵌入 ViewController 的容器视图中设置 UI PageViewController 的委托

how to setup the delegate for UIPageViewController inside Container view that is embeded in a ViewController

我有一个 MainViewController,里面有一个嵌入了 UIPageViewController 的容器视图。 MainViewController 符合协议 UIPageViewControllerDelegate, UIPageViewControllerDataSource 我希望嵌入式 UIPageViewControllerMainViewController 委托。 这可能吗?

基本上我试图以类似的态度将视图控制器中的集合视图作为情节提要的出口,然后为其设置委托(collectionView.delegate = self,假设自己委托它) 于是这态度有了UIPageViewController。 我遇到的障碍是没有 PageView 作为 PageViewController 的对立面(与集合视图相比,我有 CollectionView 而不是 CollectionViewController

以下是您可以用来生成此内容的步骤:

您可以通过覆盖 MainViewController 中的 func prepare(for segue: UIStoryboardSegue, sender: Any?) 来获取对 UIPageViewController 的引用。当您的嵌入式控制器成为子控制器时,将触发此功能。

假设你给了你的 segue 一个名字(让我们使用 pageSegue 作为这个例子),你可以在 MainViewController 中做这样的事情:

func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "pageSegue", let controller = segue.destination as? UIPageViewController {
        controller.delegate = self
        controller.dataSource = self
    }

}

您可以通过以下方式将对页面视图控制器的引用添加到主视图控制器:

var walkthroughPageViewController: WalkthroughPageVC? {
        return self.children.first as? WalkthroughPageVC
}

从这里,您可以设置 walkthroughPageViewController.delegate = self

当然,这种方法只有在你有一个嵌入式视图控制器的情况下才有效。

如果你有多个,Thomas 上面的方法更适合抓取你想要的特定视图控制器。