UIPageViewController使用viewControllerBeforeViewController和viewControllerAfterViewController方法调用数据源时,它正在获取用户再次滑动时将显示的视图控制器。是否有一个可写属性,在需要使用数据之前,它会将这些数据保存在其中?我问这个问题的原因是,我希望用户能够滑动以前进或后退,或者简单地点击以前进到下一张幻灯片。但是,如果我点击从第一张幻灯片前进到第二张幻灯片(使用setViewControllers方法前进),我就无法向后滑动;没有可返回的后控制器。这只影响第二张幻灯片。因此,我需要能够以编程方式设置上一个控制器。
如有任何帮助,我们将不胜感激。
谢谢。
我遇到了类似的问题,发现UIPageViewController
将其缓存的View Controller页面存储在childViewControllers
数组中。
无法访问缓存的视图控制器。当您实现数据源方法以启用滑动时,您可以保留一个指针:
– pageViewController:viewControllerBeforeViewController:
– pageViewController:viewControllerAfterViewController:
如Kelin的回答所述,子数组包含"已加载"的视图控制器。该信息还可以用于在加载的视图控制器之间传播更改。(一种常见的情况是结束刷新控件的刷新。)
在Swift中,你可以做这样的事情:
for vc in children {
if let tableVC = vc as? UITableViewController {
tableVC.refreshControl?.endRefreshing()
}
}
(其中self属于UIPageViewController类型)
多亏了Kelin的回答,我才得以解决一致性问题。每次我想更改UIPageViewController
中的控制器并确保它们都没有缓存时,我都会在setViewControllers
方法之前调用这个:
for child in children {
child.willMove(toParent: nil)
child.view.removeFromSuperview()
child.removeFromParent()
}