Ios 使用新的背景、导航栏图像和选项卡栏图像设置我的iPhone应用程序的主题

Ios 使用新的背景、导航栏图像和选项卡栏图像设置我的iPhone应用程序的主题,ios,uitabbarcontroller,uitabbar,uiappearance,Ios,Uitabbarcontroller,Uitabbar,Uiappearance,我正在为我的应用程序设置主题,让用户在应用程序设置中选择和切换主题 我有一个三选项卡的选项卡栏控制器 表1=时间线;Tab 2=事件,Tab 3=设置,其中三个都是表视图 用户进入“设置”,单击“主题”单元格并选择一个主题。通过NSUserDefaults,我可以根据主题更改背景图像和导航栏。然而,我正在努力使选项卡栏图像不断变化 现在,它应用于AppDelegate,但这将应用于每个场景 在我的时间线表格视图和将出现的视图中,我有: else if ([self.selectedTheme i

我正在为我的应用程序设置主题,让用户在应用程序设置中选择和切换主题

我有一个三选项卡的选项卡栏控制器

表1=时间线;Tab 2=事件,Tab 3=设置,其中三个都是表视图

用户进入“设置”,单击“主题”单元格并选择一个主题。通过NSUserDefaults,我可以根据主题更改背景图像和导航栏。然而,我正在努力使选项卡栏图像不断变化

现在,它应用于AppDelegate,但这将应用于每个场景

在我的时间线表格视图和将出现的视图中,我有:

else if ([self.selectedTheme isEqualToString:@"Twirl"])
{
    ThemeManager *themeManager = [ThemeManager sharedManager];
    themeManager.backgrounds = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ReddishBlack.png"]];
    self.tableView.backgroundView = themeManager.backgrounds;
    UIImage *navBackgroundImage = [UIImage imageNamed:@"ReddishBlackNav.png"];

    [[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

}
这真的很有效

然而,如果在上述if声明末尾,我添加:

UIImage *tabBackgroundImage = [UIImage imageNamed:@"Orange3tab.png"];
[[UITabBar appearance] setBackgroundImage:tabBackgroundImage];
当我在“设置”中选择此主题时,选项卡栏永远不会更改

我在网上搜索了一下,发现:

UIImage *tabBackground = [[UIImage imageNamed:@"tabBarBackground.jpg"] 
                          resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set background for all UITabBars
[[UITabBar appearance] setBackgroundImage:tabBackground];
// Set background for only this UITabBar
[[tabBarController tabBar] setBackgroundImage:tabBackground];
我想为整个应用程序设置此设置。因此,如果用户单击“绿色”主题,则绿色选项卡栏将应用于整个应用程序。我怎样才能做到这一点

另外,如果我必须像上面的代码那样只设置这个UITabBar的背景,并且我必须为每个类都这样做,我很乐意这样做,但是如何获得对[[tabBarController tabBar]的引用呢


这方面的任何帮助都会非常有用。我基本上希望确保选项卡栏主题在被选中时与背景和导航栏保持相同的主题。

这已被修复,我的视图中将显示以下代码:

    UIImage *tabBackground = [[UIImage imageNamed:@"purplytab.png"]
                              resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [self.tabBarController.tabBar setBackgroundImage:tabBackground];