Objective C - 改变实现外观 api 的控件的外观
Posted
技术标签:
【中文标题】Objective C - 改变实现外观 api 的控件的外观【英文标题】:Objective C - Altering appearance of control implementing appearance api 【发布时间】:2014-06-24 08:19:11 【问题描述】:我正在使用外观api自定义UISearchBar
[[UISearchBar appearance] setSearchFieldBackgroundImage:searchBackground forState:UIControlStateNormal];
[[UISearchBar appearance] setBackgroundImage:backgroundImage];
[[UISearchBar appearance] setScopeBarBackgroundImage:backgroundImage];
[[UISearchBar appearance] setBackgroundColor:[UIColor clearColor]];
我在一个作为其他类的父类的类中使用它,以便在所有 child 类上实现效果。
现在我需要自定义一个包含UISearchBar
的子类。我试过link
但是当外观在超类上完成时,我无法获得这种效果。如果我删除 appearance 那么我就能产生这种效果。
如何通过实现 appearance api 来做到这一点?
【问题讨论】:
【参考方案1】:基于Apple's documentation
[[UISearchBar appearanceWhenContainedIn:[yourSubClassedViewControllerWhichHasSearchbar class], nil]
setBackgroundColor:[UIColor orangeColor]];
【讨论】:
【参考方案2】:我用下面的代码解决了这个问题
[[UISearchBar appearance] setSearchFieldBackgroundImage:nil forState:UIControlStateNormal];
[[UISearchBar appearance] setBackgroundImage:nil];
[[UISearchBar appearance] setBackgroundColor:[UIColor clearColor]];
for (id img in srchbar.subviews)
if ([img isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
[img removeFromSuperview];
编辑: 以上解决方案可能会导致其他显示错误。所以最好的解决方案被标记为正确的。
【讨论】:
以上是关于Objective C - 改变实现外观 api 的控件的外观的主要内容,如果未能解决你的问题,请参考以下文章
Objective C 我们怎样才能改变按钮的背景图像,当它被点击然后恢复正常?