Remembers previous game collection when returning to GamesViewController

This commit is contained in:
Riley Testut 2016-12-11 18:24:57 -08:00
parent 64f1b66431
commit 3311c04a07
2 changed files with 32 additions and 2 deletions

View File

@ -206,7 +206,7 @@ private extension GamesViewController
var resetPageViewController = false 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 }) 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 // Reset page view controller if currently hidden or current child should view controller no longer exists
if self.pageViewController.view.isHidden || resetPageViewController 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.pageViewController.view.setHidden(false, animated: animated)
self.backgroundView.setHidden(true, 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.pageViewController.setViewControllers([viewController], direction: .forward, animated: false, completion: nil)
self.title = viewController.title self.title = viewController.title
self.pageControl.currentPage = index
} }
} }
else else
@ -334,6 +345,12 @@ extension GamesViewController: UIPageViewControllerDataSource, UIPageViewControl
{ {
let index = self.fetchedResultsController.fetchedObjects?.index(where: { $0 as! GameCollection == gameCollection }) ?? 0 let index = self.fetchedResultsController.fetchedObjects?.index(where: { $0 as! GameCollection == gameCollection }) ?? 0
self.pageControl.currentPage = index self.pageControl.currentPage = index
Settings.previousGameCollection = gameCollection
}
else
{
Settings.previousGameCollection = nil
} }
self.title = pageViewController.viewControllers?.first?.title self.title = pageViewController.viewControllers?.first?.title

View File

@ -54,6 +54,18 @@ struct Settings
get { return UserDefaults.standard.translucentControllerSkinOpacity } 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() static func registerDefaults()
{ {
let defaults = [#keyPath(UserDefaults.translucentControllerSkinOpacity): 1.0] let defaults = [#keyPath(UserDefaults.translucentControllerSkinOpacity): 1.0]
@ -146,4 +158,5 @@ private extension Settings
private extension UserDefaults private extension UserDefaults
{ {
@NSManaged var translucentControllerSkinOpacity: CGFloat @NSManaged var translucentControllerSkinOpacity: CGFloat
@NSManaged var previousGameCollectionIdentifier: String?
} }