From 3311c04a07f825c314cd1d3294de35928e901dce Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Sun, 11 Dec 2016 18:24:57 -0800 Subject: [PATCH] Remembers previous game collection when returning to GamesViewController --- .../Game Selection/GamesViewController.swift | 21 +++++++++++++++++-- Delta/Settings/Settings.swift | 13 ++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Delta/Game Selection/GamesViewController.swift b/Delta/Game Selection/GamesViewController.swift index df0cc99..01f76ad 100644 --- a/Delta/Game Selection/GamesViewController.swift +++ b/Delta/Game Selection/GamesViewController.swift @@ -206,7 +206,7 @@ private extension GamesViewController var resetPageViewController = false - if let viewController = pageViewController.viewControllers?.first as? GameCollectionViewController, let gameCollection = viewController.gameCollection + if let viewController = self.pageViewController.viewControllers?.first as? GameCollectionViewController, let gameCollection = viewController.gameCollection { if let index = self.fetchedResultsController.fetchedObjects?.index(where: { $0 as! GameCollection == gameCollection }) { @@ -228,7 +228,17 @@ private extension GamesViewController // Reset page view controller if currently hidden or current child should view controller no longer exists if self.pageViewController.view.isHidden || resetPageViewController { - if let viewController = self.viewControllerForIndex(0) + var index = 0 + + if let gameCollection = Settings.previousGameCollection + { + if let gameCollectionIndex = self.fetchedResultsController.fetchedObjects?.index(where: { $0 as! GameCollection == gameCollection }) + { + index = gameCollectionIndex + } + } + + if let viewController = self.viewControllerForIndex(index) { self.pageViewController.view.setHidden(false, animated: animated) self.backgroundView.setHidden(true, animated: animated) @@ -236,6 +246,7 @@ private extension GamesViewController self.pageViewController.setViewControllers([viewController], direction: .forward, animated: false, completion: nil) self.title = viewController.title + self.pageControl.currentPage = index } } else @@ -334,6 +345,12 @@ extension GamesViewController: UIPageViewControllerDataSource, UIPageViewControl { let index = self.fetchedResultsController.fetchedObjects?.index(where: { $0 as! GameCollection == gameCollection }) ?? 0 self.pageControl.currentPage = index + + Settings.previousGameCollection = gameCollection + } + else + { + Settings.previousGameCollection = nil } self.title = pageViewController.viewControllers?.first?.title diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index 1ba1b67..cfa95d1 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -54,6 +54,18 @@ struct Settings get { return UserDefaults.standard.translucentControllerSkinOpacity } } + static var previousGameCollection: GameCollection? { + set { UserDefaults.standard.previousGameCollectionIdentifier = newValue?.identifier } + get { + guard let identifier = UserDefaults.standard.previousGameCollectionIdentifier else { return nil } + + let predicate = NSPredicate(format: "%K == %@", #keyPath(GameCollection.identifier), identifier) + + let gameCollection = GameCollection.instancesWithPredicate(predicate, inManagedObjectContext: DatabaseManager.shared.viewContext, type: GameCollection.self) + return gameCollection.first + } + } + static func registerDefaults() { let defaults = [#keyPath(UserDefaults.translucentControllerSkinOpacity): 1.0] @@ -146,4 +158,5 @@ private extension Settings private extension UserDefaults { @NSManaged var translucentControllerSkinOpacity: CGFloat + @NSManaged var previousGameCollectionIdentifier: String? }