Manager updates for navigating to controller.
This commit is contained in:
parent
0a8e8ad98d
commit
314f2e91cb
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -95,6 +95,7 @@ CGFloat const PanelAnimationDuration = 0.2;
|
||||
if (topAlertView) {
|
||||
[splitViewController subscribeForNotifications];
|
||||
}
|
||||
[MVMCoreObject sharedInstance].viewControllerManager = splitViewController;
|
||||
return splitViewController;
|
||||
}
|
||||
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user