gpt4 book ai didi

ios - Swift:从其他 Viewcontroller 调用 PageViewController 中的函数

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:27 24 4
gpt4 key购买 nike

我得到了一个 PageViewController,它加载了两个“子”ViewController,以便让用户“滑动”它们。我不想要这种轻扫手势,而是我想在我的 ViewController 中有一个函数,它允许我在 PageViewController 中使用 setViewControllers。

我尝试使用协议(protocol),但即使那样也没有成功。

对于如何实现这一目标的任何帮助或建议,我将不胜感激。谢谢!

最佳答案

要从您的 subview Controller 访问 setViewControllers,您需要您的 subview Controller 知道它们的父 PageViewController。为此,首先制定协议(protocol)(我知道您已经说过您已经尝试过协议(protocol),但请仔细阅读我的方法)。该协议(protocol)将确保每个 subview Controller 都有对父 PageViewController 的引用。

    protocol PageObservation: class {
func getParentPageViewController(parentRef: PageViewController)
}

确保您的 subview Controller 遵守 PageObservation 协议(protocol)。

    class Child1ViewController: UIViewController, PageObservation {
var parentPageViewController: PageViewController!
func getParentPageViewController(parentRef: PageViewController) {
parentPageViewController = parentRef
}
}

class Child2ViewController: UIViewController, PageObservation {
var parentPageViewController: PageViewController!
func getParentPageViewController(parentRef: PageViewController) {
parentPageViewController = parentRef
}
}

在您的 PageViewController 中,当您创建每个 subview Controller 时,将它们转换为 PageObservation 类型并传递父 PageViewController 的引用。我使用一个名为 orderViewControllers 的数组来创建我的页面。我的 UIPageViewControllerDataSource 委托(delegate)方法使用它来知道要加载哪些页面,但这与本示例无关,我只是想让您知道,以防您使用不同的方式创建页面。

    class PageViewController: UIPageViewController {
var orderedViewControllers: [UIViewController] = []


//creating child 1
//i am using storyboard to create the child view controllers, I have given them the identifiers Child1ViewController and Child2ViewController respectively
let child1ViewController = UIStoryboard(name: "Main", bundle: nil) .
instantiateViewController(withIdentifier: "Child1ViewController")
let child1WithParent = child1ViewController as! PageObservation
child1WithParent.getParentPageViewController(parentRef: self)

orderedViewControllers.append(child1ViewController)

//creating child 2
let child2ViewController = UIStoryboard(name: "Main", bundle: nil) .
instantiateViewController(withIdentifier: "Child2ViewController")
let child2WithParent = child2ViewController as! PageObservation
child2WithParent.getParentPageViewController(parentRef: self)

orderedViewControllers.append(child2ViewController)
}

现在在您的 subview Controller 中,您可以访问 setViewControllers。例如,如果我想在 child1ViewController 中调用 setViewControllers,我创建了一个名为 accessSetViewControllers() 的函数,我可以在其中访问 setViewControllers:

    class Child1ViewController: UIViewController, PageObservation {
var parentPageViewController: PageViewController!
func getParentPageViewController(parentRef: PageViewController) {
parentPageViewController = parentRef
}

func accessSetViewControllers() {
parentPageViewController.setViewControllers( //do what you need )
}
}

附带说明一下,尽管上面的其他答案已经说过,但您可以将数据源设置为您喜欢的任何值。我有时将 dataSource 设置为 nil 以防止用户在执行某些操作之前从屏幕上滑动离开,然后将 dataSource 添加回去以允许他们继续滑动。

关于ios - Swift:从其他 Viewcontroller 调用 PageViewController 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42429119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com