我需要一种方法让 UIPageViewController 重用 Controller 来节省内存,因为我有大量的页面要显示! 我做了 UIPageViewController 的基本实现,但无法使 Controller 可重用,请指教!
最佳答案
为了解决我当前项目中的这个问题,我将所有创建为 UIPageViewController
页面的 View Controller 缓存在 Set
中。每当 UIPageViewController
从它的数据源请求一个新的 View Controller 时,我通过检查 parentViewController
属性从缓存中过滤掉一个未使用的;如果没有未使用的 View Controller 可用,则创建一个新的。
我对 UIPageViewController
和缓存的设置与此类似:
class MyPageViewController: UIPageViewController {
private var reusableViewControllers = Set<MyViewController>()
init() {
super.init(/* ... */)
self.dataSource = self
let initialViewController = self.unusedViewController()
// Configure the initial view controller
// ...
self.setViewControllers([ initialViewController ],
direction: .Forward,
animated: false,
completion: nil)
}
// This function returns an unused view controller from the cache
// or creates and returns a new one
private func unusedViewController() -> MyViewController {
let unusedViewControllers = reusableViewControllers.filter { $0.parentViewController == nil }
if let someUnusedViewController = unusedViewControllers.last {
return someUnusedViewController
} else {
let newViewController = MyViewController()
reusableViewControllers.insert(newViewController)
return newViewController
}
}
}
数据源使用相同的函数获取未使用的 View Controller :
extension MyPageViewController: UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let nextViewController = unusedViewController()
// Configure the next view controller for display
// ...
return nextViewController
}
}
关于ios - 如何使 UIPageViewController 像 tableview 重用单元一样重用 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31182349/