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 - iCarousel 库

Objective-C 外观模式--简单介绍和使用

Objective C 我们怎样才能改变按钮的背景图像,当它被点击然后恢复正常?

在宏中使用 Objective C API 登录静态库

Swift与Objective-C和Cocoa混合编程的基本设置!

设置样式表后 Qt Customwidget 外观没有改变