Navigation Refresh protocol
This commit is contained in:
parent
fc9272d0b7
commit
e60824ee1b
@ -11,18 +11,39 @@ import Foundation
|
||||
public protocol PageProtocol {
|
||||
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 {
|
||||
mutating func updateNavigation(with model: NavigationItemModelProtocol & MoleculeModelProtocol) {
|
||||
extension PageProtocol {
|
||||
mutating public func updateNavigationBar(with model: NavigationItemModelProtocol & MoleculeModelProtocol) {
|
||||
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.
|
||||
manager.updateNavigation(with: model)
|
||||
} else if let navigationController = navigationController {
|
||||
NavigationController.setNavigationItem(navigationController: navigationController, navigationItemModel: model, viewController: self)
|
||||
MVMCoreUISplitViewController.setNavigationBarUI(for: self, navigationController: navigationController, navigationItemModel: model, leftPanelAccessible: (self as? MVMCoreUIDetailViewProtocol)?.isLeftPanelAccessible?(), rightPanelAccessible: (self as? MVMCoreUIDetailViewProtocol)?.isRightPanelAccessible?())
|
||||
manager.refreshNavigationUI()
|
||||
} else if let navigationController = viewController.navigationController {
|
||||
NavigationController.setNavigationItem(navigationController: navigationController, navigationItemModel: model, viewController: viewController)
|
||||
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.
|
||||
if MVMCoreUIUtility.getCurrentVisibleController() == self {
|
||||
self.setNavigationBar()
|
||||
if let manager = self.manager {
|
||||
// Let manager handle
|
||||
manager.refreshNavigationUI()
|
||||
} else {
|
||||
self.setNavigationBar()
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user