【发布时间】:2015-04-14 23:03:40
【问题描述】:
我正在使用 UIPageViewController(包含两个 UIViewController 和一个 UITableViewController)在我的应用程序中导航。我使用setViewControllers 方法添加了从一页移动到另一页的按钮,该方法在许多堆栈溢出问题中都建议使用。但是,如果我从视图控制器 B 开始,滑动到视图控制器 A,然后使用建议的 setViewControllers 方法返回到视图控制器 B,它不会简单地返回到页面,它会加载视图控制器 B 的新实例。这个是一个问题,因为我在视图控制器 B 中显示从 Internet 检索的数据,因此每次都检索它是非常无效的。
现在我知道这是可能的,因为 snapchat、tinder 和 fling 都可以做到。除非他们只存储要显示的数据并每次都加载它
【问题讨论】:
-
“我正在使用 UIPageViewController(持有两个 UIViewController 和一个 UITableViewController)”不可能。 UIPageViewController 一次只有一个视图控制器。
-
“除非他们只存储要显示的数据并每次都加载”。当然。模型视图控制器!不要在视图控制器中存储持久数据。视图控制器告诉视图如何显示模型数据。将数据存储在模型中,并以不依赖视图控制器持久化的方式存储它——因为正如您所发现的,它们不一定持久化。
-
谢谢马特,原谅我的无知,但我们是在谈论核心数据中的数据模型吗?令我惊讶的是,如果您继续使用 tinder 并向下滚动表格,然后转到另一个视图然后返回,它会以与您离开时相同的偏移量返回。那么他们甚至会存储这样的东西吗?
-
这是一个导航控制器。它是一个堆栈,所以当你推送和弹出时,你会放松回到同一个视图控制器。这是一个页面视图控制器;它根本不像那样工作。每次页面更改时,您都必须创建一个新的视图控制器。
-
你误解了我的意思,pageViewController 在包含表格视图控制器的导航控制器之间水平滚动。当您从一页滚动到另一页时,它会记住表格视图的偏移量。这对于正常滚动是有意义的,因为视图控制器被加载到 iPhone 内存中并保存在那里,但是当您执行 setViewControllers 方法时,它通常会创建导航控制器(和子表视图控制器)的新实例并滚动到它,因此重置 tableView 偏移量
标签: ios objective-c uipageviewcontroller