UIPageViewController 如何访问不可见页面

Posted

技术标签:

【中文标题】UIPageViewController 如何访问不可见页面【英文标题】:UIPageViewController how to access invisible page 【发布时间】:2014-09-16 18:44:39 【问题描述】:

我正在使用UIPageViewController 在包含一些数据的页面之间实现无限水平滚动。过渡类型设置为滚动。

一旦用户开始水平滚动,我就会通过viewControllerAfterViewControllerviewControllerBeforeViewController 代表返回上一页和下一页的详细视图控制器。

并且在任何给定时间 pageViewController 都会有一个滚动视图和三个页面在这个滚动视图中(我可以确认使用 Xcode Debug View Hierarchy)。如何访问不可见页面? .viewControllers 属性只包含一个与可见页面对应的元素。

【问题讨论】:

【参考方案1】:

UIPageViewController 的默认行为是处理当前不可见的页面。它有点像UITableView,但单元格是视图控制器。访问不可见 vcs 的唯一方法是在构建它们之后保留指向它们的强指针(对于无限数量的页面可能是不明智的),或者根据需要构建一个特定的。

这应该让你思考你打算用隐形 vc 做什么。如果您正在考虑改变它的外观,请再想一想:它不存在。同样,这有点类似于UITableView,我们通常不直接更改单元格。相反,我们更改了我们的模型并且单元格发生了变化,因为它是根据 cellForRowAtIndexPath: 中的模型进行配置的。

这里也有同样的想法。保持一个独立于页面 vcs 的模型。当他们得到viewWillAppear时,他们可以根据模型配置他们的视图。

【讨论】:

你确定它适用于滚动类型的过渡吗?通过记录页面视图控制器的viewDidLoad/dealloc,我可以看到UIPageViewController 拥有三个页面以让用户左右滚动。 我最终使用弱引用将页面链接到每个页面,但仍然想知道是否有更好的方法。

以上是关于UIPageViewController 如何访问不可见页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIPageViewController 和孩子之间正确传递对象

使用 UIPageViewController 使 UI 滚动视图滚动

访问iOS6 UIPageViewController 创建的UIPageControl?

UIPageViewController 访问错误

UIPageViewController 可访问性或画外音

在 UIPageViewController 中访问已创建的视图控制器