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