更改应用程序主题时更改 UITabbar?

Posted

技术标签:

【中文标题】更改应用程序主题时更改 UITabbar?【英文标题】:Changing UITabbar when the app theme is being changed? 【发布时间】:2018-08-08 12:19:16 【问题描述】:

我想为一个应用支持 2 个主题。光明与黑暗的一种。所以,我有一个UIButton,它允许用户点击它并在明暗主题之间切换。

UITabBar 有自己的类,我已将其设置为根据当前主题进行相应更改,但它不起作用。不知道我做错了什么。

class MainTabbar: UITabBarController 

    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        self.tabBar.barTintColor = Theme.current.tabbarTintColor
        self.tabBar.tintColor = Theme.current.tabbarSelectedItems
        self.tabBar.unselectedItemTintColor = Theme.current.tabbarUnselectedItemsColor
    

AppDelegate文件中,我检查是否有选定的主题,如果没有,设置LightTheme

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
 // Set Theme
 if UserDefaults.standard.object(forKey: SelectedThemeKey) != nil 
        Theme.current = UserDefaults.standard.bool(forKey: SelectedThemeKey) ? LightTheme() : DarkTheme()
        print("current theme is: \(Theme.current)")
    
 

到目前为止,它只会在重新启动应用程序时更改 UITabbar 的颜色。

【问题讨论】:

【参考方案1】:

当应用主题更改时,您需要在任何选项卡内的任何位置访问这些主题

self.tabBarController.tabBar.barTintColor = Theme.current.tabbarTintColor
self.tabBarController.tabBar.tintColor = Theme.current.tabbarSelectedItems
self.tabBarController.tabBar.unselectedItemTintColor = Theme.current.tabbarUnselectedItemsColor

//

或者如果根是tabController

let tab = UIApplication.shared.keyWindow?.rootViewController as! UITabBarController

【讨论】:

该死,我以为我只能在一个文件中更改它。我当然不能将它设置为AppDelegate 中的根视图控制器,因为它不是rootViewController 如果出现 tabBarController ,您可以在任何更改主题的地方访问它并更改属性,因为当 tabBar 上方有另一个 VC poped 时调用 viewWillAppear ,它在重新启动后工作viewWillAppear 肯定会再次被调用

以上是关于更改应用程序主题时更改 UITabbar?的主要内容,如果未能解决你的问题,请参考以下文章

使用不是 rootViewController 的 TabBarViewController 更改 UITabBar 的图标

更改 UITabBar 选项卡时关闭 DetailController?

iOS创建UITabBar谁的项目可以用户动态更改

在 iOS 中导航期间更改 UITabBar

UIAlertView 更改 UITabbar 项目选定的颜色

当我更改 UITabBar 的颜色时,它只显示为灰色