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

标签 ios objective-c swift uipageviewcontroller

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

相关文章:

ios - spritekit SKAction.resizeToHeight 不重复

ios - 如何在 Swift iOS 中通过 QR 扫描仪扫描时在日历中添加事件

ios - 从 Assets.xcassets 加载视频

SwiftUI:从屏幕上的 CGPoint 转换为 View 中的 CGPoint

ios - 带有 tabris 的 ios 按钮背景颜色错误?

ios - WKWebView 添加到 subview

iPhone:如何使用它(标签栏 Controller 和导航 Controller )

ios - shouldChangeCharactersInRange 如何在 Swift 中工作?

iphone - iOS : Getting FriendList along with respective name, 使用 FBGraph API 的 id 和图片

objective-c - NSLocalizedString 不起作用