Navigation Refresh protocol
This commit is contained in:
parent
fc9272d0b7
commit
e60824ee1b
@ -11,18 +11,39 @@ import Foundation
|
|||||||
public protocol PageProtocol {
|
public protocol PageProtocol {
|
||||||
var pageModel: PageModelProtocol? { get set }
|
var pageModel: PageModelProtocol? { get set }
|
||||||
|
|
||||||
mutating func updateNavigation(with model: NavigationItemModelProtocol & MoleculeModelProtocol)
|
/// Sets the navigationBar property of the pageModel and attempts to refresh the ui.
|
||||||
|
mutating func updateNavigationBar(with model: NavigationItemModelProtocol & MoleculeModelProtocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
public extension PageProtocol where Self: UIViewController {
|
extension PageProtocol {
|
||||||
mutating func updateNavigation(with model: NavigationItemModelProtocol & MoleculeModelProtocol) {
|
mutating public func updateNavigationBar(with model: NavigationItemModelProtocol & MoleculeModelProtocol) {
|
||||||
pageModel?.navigationBar = model
|
pageModel?.navigationBar = model
|
||||||
if var manager = ((self as? MVMCoreViewManagerViewControllerProtocol)?.manager as? PageProtocol) {
|
(self as? NavigationBarRefreshProtocol)?.refreshNavigationUI()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A protocol to inform that we should refresh the navigation bar ui.
|
||||||
|
@objc public protocol NavigationBarRefreshProtocol {
|
||||||
|
@objc func refreshNavigationUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
public extension UINavigationBar {
|
||||||
|
|
||||||
|
/// Convenience function to refresh the navigation bar ui.
|
||||||
|
@objc static func refreshNavigationUI(for viewController: UIViewController) {
|
||||||
|
guard let model = (viewController as? PageProtocol)?.pageModel?.navigationBar else { return }
|
||||||
|
if let manager = ((viewController as? MVMCoreViewManagerViewControllerProtocol)?.manager as? NavigationBarRefreshProtocol) {
|
||||||
// Go through the manager if possible.
|
// Go through the manager if possible.
|
||||||
manager.updateNavigation(with: model)
|
manager.refreshNavigationUI()
|
||||||
} else if let navigationController = navigationController {
|
} else if let navigationController = viewController.navigationController {
|
||||||
NavigationController.setNavigationItem(navigationController: navigationController, navigationItemModel: model, viewController: self)
|
NavigationController.setNavigationItem(navigationController: navigationController, navigationItemModel: model, viewController: viewController)
|
||||||
MVMCoreUISplitViewController.setNavigationBarUI(for: self, navigationController: navigationController, navigationItemModel: model, leftPanelAccessible: (self as? MVMCoreUIDetailViewProtocol)?.isLeftPanelAccessible?(), rightPanelAccessible: (self as? MVMCoreUIDetailViewProtocol)?.isRightPanelAccessible?())
|
MVMCoreUISplitViewController.setNavigationBarUI(for: viewController, navigationController: navigationController, navigationItemModel: model, leftPanelAccessible: (viewController as? MVMCoreUIDetailViewProtocol)?.isLeftPanelAccessible?(), rightPanelAccessible: (viewController as? MVMCoreUIDetailViewProtocol)?.isRightPanelAccessible?())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension UIViewController: NavigationBarRefreshProtocol {
|
||||||
|
public func refreshNavigationUI() {
|
||||||
|
UINavigationBar.refreshNavigationUI(for: self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -121,7 +121,12 @@ import UIKit
|
|||||||
|
|
||||||
// Update navigation bar if showing.
|
// Update navigation bar if showing.
|
||||||
if MVMCoreUIUtility.getCurrentVisibleController() == self {
|
if MVMCoreUIUtility.getCurrentVisibleController() == self {
|
||||||
self.setNavigationBar()
|
if let manager = self.manager {
|
||||||
|
// Let manager handle
|
||||||
|
manager.refreshNavigationUI()
|
||||||
|
} else {
|
||||||
|
self.setNavigationBar()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user