目标C - 改变控件实现外观api的外观

时间:2014-06-24 08:19:12

标签: ios objective-c uisearchbar uiappearance

我使用外观api来自定义UISearchBar

[[UISearchBar appearance] setSearchFieldBackgroundImage:searchBackground forState:UIControlStateNormal];
[[UISearchBar appearance] setBackgroundImage:backgroundImage];
[[UISearchBar appearance] setScopeBarBackgroundImage:backgroundImage];
[[UISearchBar appearance] setBackgroundColor:[UIColor clearColor]];

我在其他类的父类中使用它,以便在所有类上实现该效果。

现在我需要自定义一个包含UISearchBar的子类。我试过了link

但是当外观在超类上完成时,我无法获得该效果。如果我删除外观,那么我就可以产生这种效果。

如何通过实施外观 api?

来实现这一目标

2 个答案:

答案 0 :(得分:1)

基于Apple's documentation

    [[UISearchBar appearanceWhenContainedIn:[yourSubClassedViewControllerWhichHasSearchbar class], nil]
     setBackgroundColor:[UIColor orangeColor]];

答案 1 :(得分:0)

我使用以下代码

解决了这个问题
[[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];
    }
}

修改 以上解决方案可能导致其他人显示错误。因此,最佳解决方案标记为正确。