分离 UIAppearence 代码
Posted
技术标签:
【中文标题】分离 UIAppearence 代码【英文标题】:Separating UIAppearence code 【发布时间】:2014-01-23 19:18:25 【问题描述】:我想为我正在创建的应用程序添加主题。只需在 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
。
有没有更好的方法来解决这个问题?另外我想把与主题相关的代码放在一个单独的类中,因为它重复了很多代码。我该怎么做?
谢谢。
【问题讨论】:
【参考方案1】:您遇到的问题是由于UIAppearance
仅在下一次创建 UI 控件时生效。你的新UIToolbar
呈现出新的外观,因为当你推送一个新的视图控制器时,它有一个全新的工具栏。您的 UINavigationBar
没有改变,因为它是在创建您的导航控制器视图时创建的,并且不会更新其外观。
您还必须直接在您的navigationController 的navigationBar 上更新该属性。例如:
self.navigationController.navigationBar.barTintColor = blueTheme;
【讨论】:
我明白了。我现在知道了。谢谢:)以上是关于分离 UIAppearence 代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIAppearence 更改 UIViewController 的直接子视图的背景颜色
使用 UIAppearence 设置 UITableViewCell 选择的背景颜色不起作用