我正在制作一个使用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方法内部。
答案 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)
希望这会有所帮助:)