diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabBar.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabBar.swift index 1cf06325..1ee7ee71 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabBar.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabBar.swift @@ -99,6 +99,10 @@ import Foundation self.tabBar(self, didSelect: newSelectedItem) }) } + + public func currentTabIndex() -> Int { + return model.selectedTab + } } extension UITabBarItem: MFButtonProtocol { diff --git a/MVMCoreUI/Atomic/Protocols/TabBarProtocol.swift b/MVMCoreUI/Atomic/Protocols/TabBarProtocol.swift index 19c7e107..1ee147f7 100644 --- a/MVMCoreUI/Atomic/Protocols/TabBarProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/TabBarProtocol.swift @@ -17,4 +17,7 @@ import Foundation /// Should select the tab index. As if the user selected it. @objc func selectTab(at index: Int) + + /// Returns the current tab + @objc func currentTabIndex() -> Int } diff --git a/MVMCoreUI/BaseControllers/ViewController.swift b/MVMCoreUI/BaseControllers/ViewController.swift index 336d5da6..f0d6ab84 100644 --- a/MVMCoreUI/BaseControllers/ViewController.swift +++ b/MVMCoreUI/BaseControllers/ViewController.swift @@ -39,6 +39,9 @@ import UIKit public var selectedField: UIView? + // Stores the previous tab bar index. + public var tabBarIndex: Int? + /// Checks if the screen width has changed open func screenSizeChanged() -> Bool { return !MVMCoreGetterUtility.cgfequalwiththreshold(previousScreenSize.width, view.bounds.size.width, 0.1) @@ -318,13 +321,27 @@ import UIKit //-------------------------------------------------- open func updateTabBar() { - guard MVMCoreUISplitViewController.main()?.getCurrentDetailViewController() == self, - let tabModel = pageModel as? TabPageModelProtocol else { return } + guard MVMCoreUISplitViewController.main()?.getCurrentDetailViewController() == self else { return } MVMCoreUISplitViewController.main()?.tabBar?.delegateObject = delegateObjectIVar - if let index = tabModel.tabBarIndex { + + if let index = (pageModel as? TabPageModelProtocol)?.tabBarIndex { MVMCoreUISplitViewController.main()?.tabBar?.highlightTab(at: index) + } else if let index = loadObject?.requestParameters?.actionMap?["tabBarIndex"] as? Int { + MVMCoreUISplitViewController.main()?.tabBar?.highlightTab(at: index) + } else if let index = self.tabBarIndex { + MVMCoreUISplitViewController.main()?.tabBar?.highlightTab(at: index) + } else if let index = MVMCoreUISplitViewController.main()?.tabBar?.currentTabIndex() { + // Store current tab index for cases like back button. + self.tabBarIndex = index + } + + if let hidden = (pageModel as? TabPageModelProtocol)?.tabBarHidden { + MVMCoreUISplitViewController.main()?.updateTabBarShowing(!hidden) + } else if let hidden = loadObject?.requestParameters?.actionMap?["tabBarHidden"] as? Bool { + MVMCoreUISplitViewController.main()?.updateTabBarShowing(!hidden) + } else { + MVMCoreUISplitViewController.main()?.updateTabBarShowing(true) } - MVMCoreUISplitViewController.main()?.updateTabBarShowing(!tabModel.tabBarHidden) } //-------------------------------------------------- @@ -454,15 +471,6 @@ import UIKit loadObject?.requestParameters?.openSupportPanel ?? (loadObject?.systemParametersJSON?.boolForKey(KeyOpenSupport) ?? false) == true { MVMCoreUISession.sharedGlobal()?.splitViewController?.showRightPanel(animated: true) } - - // Selects the tab if needed. Page driven takes priority over action driven (see viewWillAppear) - if let tab: Int = loadObject?.requestParameters?.actionMap?["tabBarIndex"] as? Int, - error == nil, - loadObject?.pageJSON?["tabBarIndex"] == nil { - MVMCoreDispatchUtility.performBlock(onMainThread: { - MVMCoreUISplitViewController.main()?.tabBar?.highlightTab(at: tab) - }) - } } //--------------------------------------------------