gpt4 book ai didi

ios - 分离 UIAppearence 代码

转载 作者:行者123 更新时间:2023-11-28 20:08:05 27 4
gpt4 key购买 nike

我想为我正在创建的应用程序添加主题。只需在 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]];

在第一个 View Controller 中,我放置了一个分段控件来切换颜色。

- (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 的 View Controller 。新选择的颜色(蓝色)仅应用于 UIToolBar,而不应用于 UINavigationBar

有没有更好的方法来解决这个问题?另外我想把与主题相关的代码放在一个单独的类中,因为它重复了很多代码。我该怎么做?

谢谢。

最佳答案

您遇到的问题是因为 UIAppearance 仅在 下一次 创建 UI 控件时生效。你的新 UIToolbar 呈现出新的外观,因为当你按下一个新的 View Controller 时,它有一个全新的工具栏。您的 UINavigationBar 没有改变,因为它是在创建导航 Controller 的 View 时创建的,并且不会更新其外观。

您还必须直接更新 navigationController 的导航栏上的属性。例如:

self.navigationController.navigationBar.barTintColor = blueTheme;

关于ios - 分离 UIAppearence 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com