使用uiPageViewControllers的SetViewControllers无法正常工作

时间:2016-06-04 19:58:36

标签: ios swift uipageviewcontroller

我正在制作一个使用UIPageViewController在页面之间导航的应用程序。一切正常,但当我尝试手动更改使用setViewControllers显示哪个视图控制器时,它不会显示。

我知道它正在创建视图控制器,因为它打印到日志,但是屏幕上显示的控制器没有被更改。我用于uiviewcontroller的子类的索引也使得每个视图控制器也正确设置。

按下视图控制器时调用该功能。

这里是应该更改控制器的代码:

    func changeVC(VC: UIViewController) {
        setViewControllers([VC], direction: .Forward, animated: true, completion: nil)
    }

函数调用:

    Let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("contentView") as! ViewController
    Controller.index = row
    PageViewController().changeVC(controller)

这是表视图的didSelectRowAtIndexPath方法内部。

1 个答案:

答案 0 :(得分:1)

Cjay是绝对正确的,

Lemme详细解释它,以帮助您了解您正在做的错误。

每次调用PageViewController().changeVC(controller)时,都会创建新的PageViewController实例,并且会在刚刚创建的新实例上调用changeVC。虽然您的代码是从storyboard实例化ViewController设置它的索引,调用changeVC并设置PageViewController的ViewController一切都执行,但是你不会看到任何这对你的屏幕产生任何影响,因为你改变了你刚刚提到的PageViewController的ViewController有一个可见的有效框架(0,0,0,0)也没有加载(没有添加到你的ViewController的视图):)

而你应该做的就是在已经加载的PageViewController上做同样的事情:)

根据你的意见,你正在从storyboard加载PageViewController创建一个IBOutlet,因为它可以将其称为myPageViewController :)所以当你想要更改它的ViewController时,简单地说,

let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("contentView") as! ViewController
controller.index = row
self.myPageViewController.changeVC(controller)

希望这会有所帮助:)