From 65d2129653a7f404094fa107bd4c4ce735c3c949 Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Fri, 10 Jul 2020 22:24:36 +0530 Subject: [PATCH 1/5] adding titleView support on navigationBar --- .../Molecules/NavigationBar/NavigationItemModel.swift | 4 ++++ .../ModelProtocols/NavigationItemModelProtocol.swift | 1 + .../ModelProtocols/TabPageModelProtocol.swift | 2 +- .../MVMCoreUISplitViewController+Extension.swift | 10 ++++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Molecules/NavigationBar/NavigationItemModel.swift b/MVMCoreUI/Atomic/Molecules/NavigationBar/NavigationItemModel.swift index d7d677fa..4ba785f3 100644 --- a/MVMCoreUI/Atomic/Molecules/NavigationBar/NavigationItemModel.swift +++ b/MVMCoreUI/Atomic/Molecules/NavigationBar/NavigationItemModel.swift @@ -22,6 +22,7 @@ public class NavigationItemModel: NavigationItemModelProtocol, MoleculeModelProt public var backButton: (NavigationButtonModelProtocol & MoleculeModelProtocol)? = NavigationImageButtonModel(with: "nav_back", action: ActionBackModel()) public var additionalLeftButtons: [(NavigationButtonModelProtocol & MoleculeModelProtocol)]? public var additionalRightButtons: [(NavigationButtonModelProtocol & MoleculeModelProtocol)]? + public var titleView: MoleculeModelProtocol? public init() { hidden = false @@ -43,6 +44,7 @@ public class NavigationItemModel: NavigationItemModelProtocol, MoleculeModelProt case showRightPanelButton case additionalLeftButtons case additionalRightButtons + case titleView } required public init(from decoder: Decoder) throws { @@ -58,6 +60,7 @@ public class NavigationItemModel: NavigationItemModelProtocol, MoleculeModelProt } additionalLeftButtons = try typeContainer.decodeModelsIfPresent(codingKey: .additionalLeftButtons) additionalRightButtons = try typeContainer.decodeModelsIfPresent(codingKey: .additionalRightButtons) + titleView = try typeContainer.decodeModelIfPresent(codingKey: .titleView) } open func encode(to encoder: Encoder) throws { @@ -72,5 +75,6 @@ public class NavigationItemModel: NavigationItemModelProtocol, MoleculeModelProt try container.encodeModelIfPresent(backButton, forKey: .backButton) try container.encodeModelsIfPresent(additionalLeftButtons, forKey: .additionalLeftButtons) try container.encodeModelsIfPresent(additionalRightButtons, forKey: .additionalRightButtons) + try container.encodeModelIfPresent(titleView, forKey: .titleView) } } diff --git a/MVMCoreUI/Atomic/Protocols/ModelProtocols/NavigationItemModelProtocol.swift b/MVMCoreUI/Atomic/Protocols/ModelProtocols/NavigationItemModelProtocol.swift index 084509e0..38d95555 100644 --- a/MVMCoreUI/Atomic/Protocols/ModelProtocols/NavigationItemModelProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/ModelProtocols/NavigationItemModelProtocol.swift @@ -18,4 +18,5 @@ public protocol NavigationItemModelProtocol { var backButton: (NavigationButtonModelProtocol & MoleculeModelProtocol)? { get set } var additionalLeftButtons: [(NavigationButtonModelProtocol & MoleculeModelProtocol)]? { get set } var additionalRightButtons: [(NavigationButtonModelProtocol & MoleculeModelProtocol)]? { get set } + var titleView: MoleculeModelProtocol? { get set } } diff --git a/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift b/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift index dbee61bd..b755e1f5 100644 --- a/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift @@ -8,7 +8,7 @@ import Foundation -public protocol TabPageModelProtocol { +public protocol TabPageModelProtocol : ModelProtocol { var tabBarHidden: Bool { get set } var tabBarIndex: Int? { get set } } diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift index 963834ff..4a785a69 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift @@ -37,6 +37,8 @@ public extension MVMCoreUISplitViewController { setNavigationIconColor(navigationItemModel.tintColor.uiColor) + setNavigationTitle(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) + if let progress = progress { setBottomProgressBarProgress(progress) } @@ -108,6 +110,14 @@ public extension MVMCoreUISplitViewController { viewController.navigationItem.setRightBarButtonItems(rightItems.count > 0 ? rightItems : nil, animated: !DisableAnimations.boolValue) } + /// Sets the title of navigation item for the view controller based on model and splitview. + func setNavigationTitle(navigationController: UINavigationController, navigationItemModel: NavigationItemModelProtocol?, viewController: UIViewController) { + let delegate = (viewController as? MVMCoreViewControllerProtocol)?.delegateObject?() as? MVMCoreUIDelegateObject + if let titleViewModel = navigationItemModel?.titleView, let molecule = MoleculeObjectMapping.shared()?.createMolecule(titleViewModel, delegateObject: delegate, additionalData: nil) { + viewController.navigationItem.titleView = molecule + } + } + // MARK: - Legacy Functions /// Convenience setter for legacy files. Sets the navigation item for the view controller based on the json and splitview controller @objc static func setSplitViewController(for viewController: UIViewController, navigationController: UINavigationController, navigationJSON: [String: Any], leftPanelAccessible: Bool, rightPanelAccessible: Bool, progress: NSNumber?) throws { From eba851f2eaf838c4508e6f1f4c1188720a56ad67 Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Fri, 10 Jul 2020 22:26:31 +0530 Subject: [PATCH 2/5] remove wrong commit --- .../Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift b/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift index b755e1f5..dbee61bd 100644 --- a/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/ModelProtocols/TabPageModelProtocol.swift @@ -8,7 +8,7 @@ import Foundation -public protocol TabPageModelProtocol : ModelProtocol { +public protocol TabPageModelProtocol { var tabBarHidden: Bool { get set } var tabBarIndex: Int? { get set } } From 5410cef8bf94e8837e4597060969f0e00cffdd95 Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Fri, 10 Jul 2020 23:08:46 +0530 Subject: [PATCH 3/5] Moved to NavigationController --- MVMCoreUI/Containers/NavigationController.swift | 9 +++++++++ .../MVMCoreUISplitViewController+Extension.swift | 10 ---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/MVMCoreUI/Containers/NavigationController.swift b/MVMCoreUI/Containers/NavigationController.swift index 0cad62c5..d1d70b13 100644 --- a/MVMCoreUI/Containers/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController.swift @@ -49,6 +49,7 @@ import UIKit viewController.navigationItem.accessibilityLabel = navigationItemModel.title viewController.navigationItem.hidesBackButton = (navigationItemModel.backButton != nil) setNavigationButtons(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) + setNavigationTitle(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) } /// Convenience function for setting the navigation buttons. @@ -109,4 +110,12 @@ import UIKit } setNavigationBarUI(navigationController: navigationController, navigationItemModel: barModel, viewController: viewController) } + + /// Sets the title of navigation item for the view controller based on model and splitview. + public static func setNavigationTitle(navigationController: UINavigationController, navigationItemModel: NavigationItemModelProtocol?, viewController: UIViewController) { + let delegate = (viewController as? MVMCoreViewControllerProtocol)?.delegateObject?() as? MVMCoreUIDelegateObject + if let titleViewModel = navigationItemModel?.titleView, let molecule = MoleculeObjectMapping.shared()?.createMolecule(titleViewModel, delegateObject: delegate, additionalData: nil) { + viewController.navigationItem.titleView = molecule + } + } } diff --git a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift index 4a785a69..963834ff 100644 --- a/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift +++ b/MVMCoreUI/Containers/SplitViewController/MVMCoreUISplitViewController+Extension.swift @@ -37,8 +37,6 @@ public extension MVMCoreUISplitViewController { setNavigationIconColor(navigationItemModel.tintColor.uiColor) - setNavigationTitle(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) - if let progress = progress { setBottomProgressBarProgress(progress) } @@ -110,14 +108,6 @@ public extension MVMCoreUISplitViewController { viewController.navigationItem.setRightBarButtonItems(rightItems.count > 0 ? rightItems : nil, animated: !DisableAnimations.boolValue) } - /// Sets the title of navigation item for the view controller based on model and splitview. - func setNavigationTitle(navigationController: UINavigationController, navigationItemModel: NavigationItemModelProtocol?, viewController: UIViewController) { - let delegate = (viewController as? MVMCoreViewControllerProtocol)?.delegateObject?() as? MVMCoreUIDelegateObject - if let titleViewModel = navigationItemModel?.titleView, let molecule = MoleculeObjectMapping.shared()?.createMolecule(titleViewModel, delegateObject: delegate, additionalData: nil) { - viewController.navigationItem.titleView = molecule - } - } - // MARK: - Legacy Functions /// Convenience setter for legacy files. Sets the navigation item for the view controller based on the json and splitview controller @objc static func setSplitViewController(for viewController: UIViewController, navigationController: UINavigationController, navigationJSON: [String: Any], leftPanelAccessible: Bool, rightPanelAccessible: Bool, progress: NSNumber?) throws { From 35fda848c3a8b6bea97f94908eb9902b6996ed14 Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Fri, 10 Jul 2020 23:18:44 +0530 Subject: [PATCH 4/5] updated comments --- MVMCoreUI/Containers/NavigationController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Containers/NavigationController.swift b/MVMCoreUI/Containers/NavigationController.swift index d1d70b13..1f59f114 100644 --- a/MVMCoreUI/Containers/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController.swift @@ -111,7 +111,7 @@ import UIKit setNavigationBarUI(navigationController: navigationController, navigationItemModel: barModel, viewController: viewController) } - /// Sets the title of navigation item for the view controller based on model and splitview. + /// Convenience function for setting the navigation title. public static func setNavigationTitle(navigationController: UINavigationController, navigationItemModel: NavigationItemModelProtocol?, viewController: UIViewController) { let delegate = (viewController as? MVMCoreViewControllerProtocol)?.delegateObject?() as? MVMCoreUIDelegateObject if let titleViewModel = navigationItemModel?.titleView, let molecule = MoleculeObjectMapping.shared()?.createMolecule(titleViewModel, delegateObject: delegate, additionalData: nil) { From 97d058bdac65a033f8ec8915dd0af300a5561c68 Mon Sep 17 00:00:00 2001 From: "Khan, Arshad" Date: Fri, 10 Jul 2020 23:23:08 +0530 Subject: [PATCH 5/5] rename to titleView --- MVMCoreUI/Containers/NavigationController.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MVMCoreUI/Containers/NavigationController.swift b/MVMCoreUI/Containers/NavigationController.swift index 1f59f114..74f24957 100644 --- a/MVMCoreUI/Containers/NavigationController.swift +++ b/MVMCoreUI/Containers/NavigationController.swift @@ -49,7 +49,7 @@ import UIKit viewController.navigationItem.accessibilityLabel = navigationItemModel.title viewController.navigationItem.hidesBackButton = (navigationItemModel.backButton != nil) setNavigationButtons(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) - setNavigationTitle(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) + setNavigationTitleView(navigationController: navigationController, navigationItemModel: navigationItemModel, viewController: viewController) } /// Convenience function for setting the navigation buttons. @@ -111,8 +111,8 @@ import UIKit setNavigationBarUI(navigationController: navigationController, navigationItemModel: barModel, viewController: viewController) } - /// Convenience function for setting the navigation title. - public static func setNavigationTitle(navigationController: UINavigationController, navigationItemModel: NavigationItemModelProtocol?, viewController: UIViewController) { + /// Convenience function for setting the navigation titleView. + public static func setNavigationTitleView(navigationController: UINavigationController, navigationItemModel: NavigationItemModelProtocol?, viewController: UIViewController) { let delegate = (viewController as? MVMCoreViewControllerProtocol)?.delegateObject?() as? MVMCoreUIDelegateObject if let titleViewModel = navigationItemModel?.titleView, let molecule = MoleculeObjectMapping.shared()?.createMolecule(titleViewModel, delegateObject: delegate, additionalData: nil) { viewController.navigationItem.titleView = molecule