为什么 - [[UIButton appearance] setBackgroundImage]影响UIBarItem对象的初始外观,你如何纠正它?

时间:2012-01-04 21:37:18

标签: ios5 uikit appearance

使用类代理自定义UIButton的外观时UIBarItems似乎最初采用为UIButton设置的自定义属性。

使用Core Data从默认的Master / Detail项目开始。在AppDelegate中自定义UIButton的外观并运行应用程序。单击编辑按钮,然后单击MasterViewController导航栏中的完成按钮,并观察自定义消失。

[AppDelegate应用程序中的自定义外观代码:didFinishLaunchingWithOptions]:

UIImage *customBackground = [[UIImage imageNamed:@"yourcustomimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5,5,5,5)];  
[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal];  

All UIBarButtonItems initialize with custom background.
所有UIBarButtonItems都使用自定义背景

进行初始化

When the Edit button is replaced by the Done button, it correctly does not have the customized background.
当“完成”按钮替换“编辑”按钮时,它正确没有自定义背景。

A similar question asks how to customize the Done button。我担心为什么这会发生在UIBarItem对象上,这些对象不是从UIButton继承的,并且想知道如何纠正它。

我怀疑代理继承和支持的属性,但我不知道如何纠正它。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我的建议是在backgroundImage中包含nil重置为UINavigationBar

[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal];
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:nil forState:UIControlStateNormal];