gpt4 book ai didi

ios - 如何使 UIPageViewController 像 tableview 重用单元一样重用 Controller ?

转载 作者:IT王子 更新时间:2023-10-29 05:16:00 26 4
gpt4 key购买 nike

我需要一种方法让 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com