UIPageViewController缓存上一个和下一个控制器的位置



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()
}

最新更新