有没有办法在 UIPageViewController 中获取所有预加载的视图控制器

Is there way to get all the pre-loaded view controllers in UIPageViewController

我有一个UIPageViewController。我可以翻页,一切正常。 UIPageViewController 预加载一个 ViewController。此时,内存中有两个视图控制器(一个是可见控制器,另一个是预加载控制器)。我想获得两个 ViewController,这样我就可以即时更改一些设置。

问题是如何获得预加载的子视图控制器?如果我无法获得这些控制器,那么在所有预加载的视图控制器上重置某些属性的最佳方法是什么?

您可以修改可用于构建视图控制器的自定义对象:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    NSUInteger index = [(PageChildViewController *) viewController index];
    if (index == 0) {
        return nil;
    }
    index--;
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index {
    CustomObject *customObject = self.customObjects[index];
    PageChildViewController *childViewController = [PageChildViewController controllerWithIndex:index andCustomObject:customObject];
    return childViewController;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    NSUInteger index = [(PageChildViewController *) viewController index];
    index++;
    if (index == self.pages.count) {
        return nil;
    }
    return [self viewControllerAtIndex:index];
}

如果您需要更新当前可见的页面视图控制器,您可以使用这个:

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

如果您需要重置页面视图控制器缓存,您可以使用这个:

self.pageController.dataSource = nil;
self.pageController.dataSource = self;