为啥 -[[UIButton appearance] setBackgroundImage] 会影响 UIBarItem 对象的初始外观以及如何纠正它?
Posted
技术标签:
【中文标题】为啥 -[[UIButton appearance] setBackgroundImage] 会影响 UIBarItem 对象的初始外观以及如何纠正它?【英文标题】:Why does -[[UIButton appearance] setBackgroundImage] affect the initial appearance of UIBarItem objects and how do you correct it?为什么 -[[UIButton appearance] setBackgroundImage] 会影响 UIBarItem 对象的初始外观以及如何纠正它? 【发布时间】:2012-02-02 19:12:25 【问题描述】:当使用类代理自定义 UIButton 的外观时,UIBarItems 似乎最初采用了为 UIButton 设置的自定义属性。
从使用 Core Data 的默认 Master/Detail 项目开始。在 AppDelegate 中自定义 UIButton 的外观并运行应用程序。单击“编辑”按钮,然后单击 MasterViewController 导航栏中的“完成”按钮,然后观看自定义消失。
[AppDelegate application:didFinishLaunchingWithOptions]中的自定义外观代码:
UIImage *customBackground = [[UIImage imageNamed:@"yourcustomimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5,5,5,5)];
[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal];
所有 UIBarButtonItem 都使用自定义背景进行初始化
当 Edit 按钮被 Done 按钮替换时,它正确地没有自定义背景。
A similar question asks how to customize the Done button。我担心为什么 UIBarItem 对象会发生这种情况,这些对象不是从 UIButton 继承的,并且想知道如何纠正它。
我怀疑代理继承和支持的属性,但我不知道如何纠正它。有什么建议吗?
【问题讨论】:
我遇到了同样的问题,但还没有找到很好的解决方案。我目前正在使用 '[UIButton appearanceWhenContainedIn:' 来修复这个错误。我对此并不满意,所以我很想听听其他人是否有更好的解决方案。 【参考方案1】:我的建议是将backgroundImage
包含在UINavigationBar
中时重置为nil
:
[[UIButton appearance] setBackgroundImage:customBackground forState:UIControlStateNormal];
[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:nil forState:UIControlStateNormal];
【讨论】:
以上是关于为啥 -[[UIButton appearance] setBackgroundImage] 会影响 UIBarItem 对象的初始外观以及如何纠正它?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?