Add navigation bar model tracking to PageMoleculeTransformationBehavior.

Update ScreenRecordingMaskingBehavior to consume.
Enhance MDN regex.
This commit is contained in:
Kyle Matthew Hedden 2022-12-02 18:44:59 -05:00
parent 6449d68f4f
commit 0f8c21025d
2 changed files with 29 additions and 13 deletions

View File

@ -30,6 +30,8 @@ public protocol PageMoleculeTransformationBehavior: PageBehaviorProtocol {
func onPageNew(rootMolecules: [MoleculeModelProtocol], _ delegateObject: MVMCoreUIDelegateObject?) func onPageNew(rootMolecules: [MoleculeModelProtocol], _ delegateObject: MVMCoreUIDelegateObject?)
func willSetupMolecule(with model: MoleculeModelProtocol, updating view: MoleculeViewProtocol?) func willSetupMolecule(with model: MoleculeModelProtocol, updating view: MoleculeViewProtocol?)
func didSetupMolecule(view: MoleculeViewProtocol, withModel: MoleculeModelProtocol) func didSetupMolecule(view: MoleculeViewProtocol, withModel: MoleculeModelProtocol)
func willSetupNavigationBar(with model: NavigationItemModelProtocol, updating view: UINavigationBar)
func didSetupNavigationBar(view: UINavigationBar, withModel: NavigationItemModelProtocol)
} }
public extension PageMoleculeTransformationBehavior { public extension PageMoleculeTransformationBehavior {
@ -37,6 +39,8 @@ public extension PageMoleculeTransformationBehavior {
func onPageNew(rootMolecules: [MoleculeModelProtocol], _ delegateObject: MVMCoreUIDelegateObject?) {} func onPageNew(rootMolecules: [MoleculeModelProtocol], _ delegateObject: MVMCoreUIDelegateObject?) {}
func willSetupMolecule(with model: MoleculeModelProtocol, updating view: MoleculeViewProtocol?) {} func willSetupMolecule(with model: MoleculeModelProtocol, updating view: MoleculeViewProtocol?) {}
func didSetupMolecule(view: MoleculeViewProtocol, withModel: MoleculeModelProtocol) {} func didSetupMolecule(view: MoleculeViewProtocol, withModel: MoleculeModelProtocol) {}
func willSetupNavigationBar(with model: NavigationItemModelProtocol, updating view: UINavigationBar) {}
func didSetupNavigationBar(view: UINavigationBar, withModel: NavigationItemModelProtocol) {}
} }
public protocol PageVisibilityBehavior: PageBehaviorProtocol { public protocol PageVisibilityBehavior: PageBehaviorProtocol {

View File

@ -70,30 +70,42 @@ extension NavigationController: MVMCoreViewManagerProtocol {
public func newDataReceived(in viewController: UIViewController) { public func newDataReceived(in viewController: UIViewController) {
if isDisplayed(viewController: viewController), if isDisplayed(viewController: viewController),
let topViewController = topViewController,
let model = getNavigationModel(from: viewController) { let model = getNavigationModel(from: viewController) {
setNavigationItem(with: model, for: topViewController) updateNavigationView(with: model, for: viewController)
setNavigationBarUI(with: model)
navigationBar.setNeedsLayout()
navigationBar.layoutIfNeeded()
} }
manager?.newDataReceived?(in: viewController) manager?.newDataReceived?(in: viewController)
} }
public func willDisplay(_ viewController: UIViewController) { public func willDisplay(_ viewController: UIViewController) {
if let topViewController = topViewController, if isDisplayed(viewController: viewController),
isDisplayed(viewController: viewController),
let model = getNavigationModel(from: viewController) { let model = getNavigationModel(from: viewController) {
setNavigationItem(with: model, for: topViewController) updateNavigationView(with: model, for: viewController)
setNavigationBarUI(with: model)
navigationBar.setNeedsLayout()
navigationBar.layoutIfNeeded()
} }
manager?.willDisplay?(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) { public func displayedViewController(_ viewController: UIViewController) {
manager?.displayedViewController?(viewController) manager?.displayedViewController?(viewController)
} }