From 31a993a4834440b1f8829b07ca4fe8c1dd71e275 Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Wed, 8 Sep 2021 19:21:21 +0000 Subject: [PATCH] navigation verification fixes --- .../Containers/NavigationController.swift | 19 ++++++++++++++----- ...MCoreUISplitViewController+Extension.swift | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/MVMCoreUI/Containers/NavigationController.swift b/MVMCoreUI/Containers/NavigationController.swift index 0e16b577..22e7ee6b 100644 --- a/MVMCoreUI/Containers/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController.swift @@ -108,10 +108,16 @@ import UIKit /// Convenience function to return the navigation model of the lowest controller traversing managers if applicable. public func getNavigationModel(from viewController: UIViewController) -> NavigationItemModelProtocol? { + return (viewController as? PageProtocol)?.pageModel?.navigationBar + } + + /// Verifies the controller is the currently displayed controller. + public func isDisplayed(viewController: UIViewController) -> Bool { guard let topViewController = topViewController, - viewController == MVMCoreUIUtility.getViewControllerTraversingManagers(topViewController), - let model = (viewController as? PageProtocol)?.pageModel?.navigationBar else { return nil } - return model + viewController == MVMCoreUIUtility.getViewControllerTraversingManagers(topViewController) else { + return false + } + return true } } @@ -135,7 +141,9 @@ extension NavigationController: MVMCoreViewManagerProtocol { } public func newDataReceived(in viewController: UIViewController) { - if let topViewController = topViewController, + + if isDisplayed(viewController: viewController), + let topViewController = topViewController, let model = getNavigationModel(from: viewController) { Self.setNavigationItem(navigationController: self, navigationItemModel: model, viewController: topViewController) Self.setNavigationBarUI(navigationController: self, navigationItemModel: model, viewController: topViewController) @@ -152,7 +160,8 @@ extension NavigationController: MVMCoreViewManagerProtocol { } public func displayedViewController(_ viewController: UIViewController) { - if let topViewController = topViewController, + if isDisplayed(viewController: viewController), + let topViewController = topViewController, let model = getNavigationModel(from: viewController) { Self.setNavigationBarUI(navigationController: self, navigationItemModel: model, viewController: topViewController) } diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift index bb1b24d5..e08d11dd 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift @@ -117,6 +117,7 @@ public extension MVMCoreUISplitViewController { /// Convenience function to update the navigation bar if the controller is the current lowest controller. @objc func updateNavigationBarFor(viewController: UIViewController) { guard let navigationController = navigationController, + navigationController.isDisplayed(viewController: viewController), let model = navigationController.getNavigationModel(from: viewController) else { return } set(for: viewController, navigationController: navigationController, navigationItemModel: model) }