我正在制作一个使用 UIPageViewController 在页面之间导航的应用程序。一切正常,除了当我尝试手动更改使用 setViewControllers 显示的 View Controller 时,它不显示。
我知道它正在创建 View Controller ,因为它会打印到日志中,但屏幕上显示的 Controller 并没有改变。我为 uiviewcontroller 的子类使用的索引也正确设置了每个 View Controller 。
该函数在按下 View Controller 时被调用。
这是应该更改 Controller 的代码:
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)
这是在 TableView 的 didSelectRowAtIndexPath 方法中。
最佳答案
Cjay 完全正确,
让我更详细地解释一下,以帮助您了解自己犯了什么错误。
每次您调用 PageViewController().changeVC(controller)
时,都会创建 PageViewController 的新实例,并且会在您刚刚创建的新实例上调用 changeVC。虽然你的代码从 Storyboard 中实例化一个 ViewController 设置它的索引,调用 changeVC 并设置 PageViewController 的 ViewController 一切都执行你不会看到任何这些对你的屏幕产生任何影响,因为你改变了你刚刚启动的 PageViewController 的 ViewController有一个可见的有效框架 (0,0,0,0) 也没有被加载(没有添加到您的 ViewController 的 View 中):)
相反,您应该做的是在已加载的 PageViewController 上执行完全相同的操作:)
根据您的评论,您正在从 Storyboard 中加载 PageViewController 创建一个 IBOutlet,我们可以将其称为 myPageViewController :) 所以当您想要更改它的 ViewController 时,只需说,
let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("contentView") as! ViewController
controller.index = row
self.myPageViewController.changeVC(controller)
希望这有帮助:)
关于ios - 带有 uiPageViewControllers 的 SetViewControllers 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634465/