UITabBar自定义背景图像应用于一个视图控制器而不是AppDelegate中

时间:2014-03-18 16:57:02

标签: ios iphone uitabbar uiappearance

我正在使用iPhone应用中的主题。我在标签栏(时间轴和设置)中有两个标签,当用户转到第二个标签(设置)时,在设置中选择主题并选择主题,这样可以设置第一个表格视图的背景图像和导航栏的样式第一个选项卡中的控制器(时间轴)。这有效。

我希望使用标签栏实现相同的功能,因此标签栏会随背景图像和导航栏一起变化。

在我的时间轴表视图中,我将以下代码放在viewWillAppear中:

UIImage *tabBackgroundImage = [UIImage imageNamed:@"Purplepinktopp.png"];
[[UITabBar appearance] setBackgroundImage:tabBackgroundImage];

但是,标签栏永远不会改变。更改标签栏的唯一方法是在AppDelegate中,然后随处更改它。我需要允许用户选择一个主题,它会相应地更改,所以我需要在每个视图控制器的基础上更改它,与导航栏完全相同。

在此时间轴表格视图的viewWillAppear中,我将导航栏设置为:

UIImage *navBackgroundImage = [UIImage imageNamed:@"Purplepinknav.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

总是有效的。但是,使用上面的代码,这对标签栏不起作用。

编辑:我已将apperanceWhenContainedIn添加到viewWillAppear:

UIImage *tabBackgroundImage = [UIImage imageNamed:@"SolidPurple.png"];
[[UITabBar appearance] setBackgroundImage:tabBackgroundImage];

[UITabBar appearanceWhenContainedIn:[UITabBar class], [UITabBar class], nil];

但这似乎并没有做任何事情。

我该如何解决这个问题?任何援助都将受到极大的赞赏。

1 个答案:

答案 0 :(得分:1)

您可以尝试对UIAppearance代理呼叫进行改进......

+ (id)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass,...

仅当UIAppearance Proxy兼容对象包含在特定视图控制器子类中时,才会将其设置为所提供的值。