更改应用程序主题时更改 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?