From 0f8c21025d04290834ec794487a092010b2459c5 Mon Sep 17 00:00:00 2001 From: Kyle Matthew Hedden Date: Fri, 2 Dec 2022 18:44:59 -0500 Subject: [PATCH] Add navigation bar model tracking to PageMoleculeTransformationBehavior. Update ScreenRecordingMaskingBehavior to consume. Enhance MDN regex. --- .../Protocols/PageBehaviorProtocol.swift | 4 ++ .../NavigationController.swift | 38 ++++++++++++------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift b/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift index 3420299d..10dc3020 100644 --- a/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift +++ b/MVMCoreUI/Behaviors/Protocols/PageBehaviorProtocol.swift @@ -30,6 +30,8 @@ public protocol PageMoleculeTransformationBehavior: PageBehaviorProtocol { func onPageNew(rootMolecules: [MoleculeModelProtocol], _ delegateObject: MVMCoreUIDelegateObject?) func willSetupMolecule(with model: MoleculeModelProtocol, updating view: MoleculeViewProtocol?) func didSetupMolecule(view: MoleculeViewProtocol, withModel: MoleculeModelProtocol) + func willSetupNavigationBar(with model: NavigationItemModelProtocol, updating view: UINavigationBar) + func didSetupNavigationBar(view: UINavigationBar, withModel: NavigationItemModelProtocol) } public extension PageMoleculeTransformationBehavior { @@ -37,6 +39,8 @@ public extension PageMoleculeTransformationBehavior { func onPageNew(rootMolecules: [MoleculeModelProtocol], _ delegateObject: MVMCoreUIDelegateObject?) {} func willSetupMolecule(with model: MoleculeModelProtocol, updating view: MoleculeViewProtocol?) {} func didSetupMolecule(view: MoleculeViewProtocol, withModel: MoleculeModelProtocol) {} + func willSetupNavigationBar(with model: NavigationItemModelProtocol, updating view: UINavigationBar) {} + func didSetupNavigationBar(view: UINavigationBar, withModel: NavigationItemModelProtocol) {} } public protocol PageVisibilityBehavior: PageBehaviorProtocol { diff --git a/MVMCoreUI/Containers/NavigationController/NavigationController.swift b/MVMCoreUI/Containers/NavigationController/NavigationController.swift index 9b4b332a..329ff423 100644 --- a/MVMCoreUI/Containers/NavigationController/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController/NavigationController.swift @@ -70,30 +70,42 @@ extension NavigationController: MVMCoreViewManagerProtocol { public func newDataReceived(in viewController: UIViewController) { if isDisplayed(viewController: viewController), - let topViewController = topViewController, let model = getNavigationModel(from: viewController) { - setNavigationItem(with: model, for: topViewController) - setNavigationBarUI(with: model) - - navigationBar.setNeedsLayout() - navigationBar.layoutIfNeeded() + updateNavigationView(with: model, for: viewController) } manager?.newDataReceived?(in: viewController) } public func willDisplay(_ viewController: UIViewController) { - if let topViewController = topViewController, - isDisplayed(viewController: viewController), + if isDisplayed(viewController: viewController), let model = getNavigationModel(from: viewController) { - setNavigationItem(with: model, for: topViewController) - setNavigationBarUI(with: model) - - navigationBar.setNeedsLayout() - navigationBar.layoutIfNeeded() + updateNavigationView(with: model, for: viewController) } manager?.willDisplay?(viewController) } + private func updateNavigationView(with model: NavigationItemModelProtocol, for viewController: UIViewController) { + guard let topViewController = topViewController else { return } + + if let pageBehaviorController = viewController as? PageBehaviorHandlerProtocol { + pageBehaviorController.executeBehaviors { (behavior: PageMoleculeTransformationBehavior) in + behavior.willSetupNavigationBar(with: model, updating: navigationBar) + } + } + + setNavigationItem(with: model, for: topViewController) + setNavigationBarUI(with: model) + + navigationBar.setNeedsLayout() + navigationBar.layoutIfNeeded() + + if let pageBehaviorController = viewController as? PageBehaviorHandlerProtocol { + pageBehaviorController.executeBehaviors { (behavior: PageMoleculeTransformationBehavior) in + behavior.didSetupNavigationBar(view: navigationBar, withModel: model) + } + } + } + public func displayedViewController(_ viewController: UIViewController) { manager?.displayedViewController?(viewController) }