我想为我正在创建的应用实现添加主题。只需在2种颜色之间切换,我希望导航栏,工具栏等以所选颜色显示。
首次加载应用时,我会在AppDelegate的didFinishLaunchingWithOptions
方法中应用一种颜色。
UIColor *blueTheme = [UIColor colorWithRed:80/255.0f green:192/255.0f blue:224/255.0f alpha:1.0f];
UIColor *pinkTheme = [UIColor colorWithRed:225/255.0f green:87/255.0f blue:150/255.0f alpha:1.0f];
[[UINavigationBar appearance] setBarTintColor:pinkTheme];
[[UIToolbar appearance] setBarTintColor:pinkTheme];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
在第一个视图控制器中,我放置了一个分段控件来切换颜色。
- (IBAction)themeChosen:(UISegmentedControl *)sender
{
if (sender.selectedSegmentIndex == 0) {
UIColor *blueTheme = [UIColor colorWithRed:80/255.0f green:192/255.0f blue:224/255.0f alpha:1.0f];
[[UINavigationBar appearance] setBarTintColor:blueTheme];
[[UIToolbar appearance] setBarTintColor:blueTheme];
} else {
UIColor *pinkTheme = [UIColor colorWithRed:225/255.0f green:87/255.0f blue:150/255.0f alpha:1.0f];
[[UINavigationBar appearance] setBarTintColor:pinkTheme];
[[UIToolbar appearance] setBarTintColor:pinkTheme];
}
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}
说默认主题是粉红色。我从分段控件切换到蓝色并推送到下一个视图控制器,其中也有UIToolBar
。新选择的颜色(蓝色)仅适用于UIToolBar
,但不适用于UINavigationBar
。
还有更好的方法吗?另外,我想将与主题相关的代码放在一个单独的类中,因为它重复了很多代码。我该怎么做?
感谢。
答案 0 :(得分:3)
您遇到的问题是UIAppearance
仅在创建UI控件时生效。您的新UIToolbar
采用了新的外观,因为当您推送新的viewcontroller时,它会有一个全新的工具栏。您的UINavigationBar
没有变化,因为它是在创建导航控件的视图时创建的,并且不会更新其外观。
您还必须直接在navigationController的navigationBar上更新属性。 e.g:
self.navigationController.navigationBar.barTintColor = blueTheme;