From 314f2e91cb5d1d1f4cbda418be510761679c8e4c Mon Sep 17 00:00:00 2001 From: Scott Pfeil Date: Mon, 25 Mar 2024 13:29:36 -0400 Subject: [PATCH 1/2] Manager updates for navigating to controller. --- .../NavigationController.swift | 26 +++++++++++++++++ ...MCoreUISplitViewController+Extension.swift | 4 +++ .../MVMCoreUISplitViewController.m | 1 + .../SubNav/SubNavManagerController.swift | 29 +++++++++++++++++++ .../Utility/MVMCoreUIUtility+Extension.swift | 1 + 5 files changed, 61 insertions(+) diff --git a/MVMCoreUI/Containers/NavigationController/NavigationController.swift b/MVMCoreUI/Containers/NavigationController/NavigationController.swift index 57f4b5a5..d8d56244 100644 --- a/MVMCoreUI/Containers/NavigationController/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController/NavigationController.swift @@ -34,6 +34,7 @@ import Combine public static func setupNavigationControllerAsMainController() -> Self? { guard let navigationController = setupNavigationController() else { return nil } MVMCoreUISession.sharedGlobal()?.setup(asStandardLoadViewDelegate: navigationController) + MVMCoreObject.sharedInstance()?.viewControllerManager = navigationController return navigationController } @@ -136,6 +137,31 @@ extension NavigationController: MVMCoreViewManagerProtocol { public func displayedViewController(_ viewController: UIViewController) { manager?.displayedViewController?(viewController) } + + private func go(to index: Int) async { + guard index != viewControllers.count - 1 else { return } + await NavigationHandler.shared().set(viewControllers: Array(viewControllers[0...index]), navigationController: self) + } + + public func navigate(toViewControllerOfPageType pageType: String, controllerType: AnyClass?) async -> UIViewController? { + for (index, controller) in viewControllers.enumerated() { + if let manager = controller as? MVMCoreViewManagerProtocol, + let viewController = await manager.navigate(toViewControllerOfPageType: pageType, controllerType: controllerType) { + await go(to: index) + return viewController + } else if let controller = controller as? MVMCoreViewControllerProtocol & UIViewController, + controller.pageType == pageType { + guard let controllerType = controllerType else { + await go(to: index) + return controller + } + guard (type(of: controller) == controllerType) else { continue } + await go(to: index) + return controller + } + } + return nil + } } extension UIColor { diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift index c0420055..549d53a8 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift @@ -269,6 +269,10 @@ extension MVMCoreUISplitViewController: MVMCoreViewManagerProtocol { public func newDataReceived(in viewController: UIViewController) { updateState(with: viewController) } + + public func navigate(toViewControllerOfPageType pageType: String, controllerType: AnyClass?) async -> UIViewController? { + return await navigationController?.navigate(toViewControllerOfPageType: pageType, controllerType: controllerType) + } } @objc public extension MVMCoreUISplitViewController { diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m index 79c81b8d..453c7d56 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController.m @@ -95,6 +95,7 @@ CGFloat const PanelAnimationDuration = 0.2; if (topAlertView) { [splitViewController subscribeForNotifications]; } + [MVMCoreObject sharedInstance].viewControllerManager = splitViewController; return splitViewController; } diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index 741fb830..ed1a7ca1 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -362,6 +362,35 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, manager?.displayedViewController?(viewController) } + private func go(to index: Int) async { + // Load controller from the cache + guard index != self.index, + let controller = viewControllers[index] else { return } + needToTrackTabSelect = true + self.index = index + await NavigationHandler.shared().replace(viewController: controller, navigationController:subNavigationController, delegateObject:delegateObject(), tryToReplace: false, animated: true) + } + + public func navigate(toViewControllerOfPageType pageType: String, controllerType: AnyClass?) async -> UIViewController? { + for (index, controller) in viewControllers.enumerated() { + if let manager = controller as? MVMCoreViewManagerProtocol, + let viewController = await manager.navigate(toViewControllerOfPageType: pageType, controllerType: controllerType) { + await go(to: index) + return viewController + } else if let controller = controller as? MVMCoreViewControllerProtocol & UIViewController, + controller.pageType == pageType { + guard let controllerType = controllerType else { + await go(to: index) + return controller + } + guard (type(of: controller) == controllerType) else { continue } + await go(to: index) + return controller + } + } + return nil + } + // MARK: - MVMCoreUISwipeNavigationProtocol public func swipeLeft() { diff --git a/MVMCoreUI/Utility/MVMCoreUIUtility+Extension.swift b/MVMCoreUI/Utility/MVMCoreUIUtility+Extension.swift index 2f755491..ea91f62b 100644 --- a/MVMCoreUI/Utility/MVMCoreUIUtility+Extension.swift +++ b/MVMCoreUI/Utility/MVMCoreUIUtility+Extension.swift @@ -73,6 +73,7 @@ public extension MVMCoreUIUtility { @objc public extension MVMCoreUIUtility { + /// Returns the current visible viewcontroller. @objc @MainActor static func getVisibleViewController() -> UIViewController? { var viewController = NavigationHandler.shared().getViewControllerToPresentOn() From 36eaaf97df2511c317fffea12fdd413c45a45f9f Mon Sep 17 00:00:00 2001 From: Scott Pfeil Date: Thu, 28 Mar 2024 13:36:28 -0400 Subject: [PATCH 2/2] Digital PCT265 story MVAPCT-48 - Remove animating of navigation bar shown --- .../NavigationController/UINavigationController+Extension.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift b/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift index 44aa9207..5a3d9a1a 100644 --- a/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift +++ b/MVMCoreUI/Containers/NavigationController/UINavigationController+Extension.swift @@ -102,7 +102,7 @@ public extension UINavigationController { navigationBar.standardAppearance = appearance navigationBar.scrollEdgeAppearance = appearance - setNavigationBarHidden(model.hidden, animated: true) + setNavigationBarHidden(model.hidden, animated: false) } @objc @MainActor