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

时间:2018-08-08 12:19:16

标签: ios swift uitabbarcontroller uitabbar uitabbaritem

我想为一个应用程序支持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 个答案:

答案 0 :(得分:2)

更改应用主题后,您需要在任意标签内的任意位置访问这些主题

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