如何更改搜索栏的颜色?

时间:2012-05-10 11:24:58

标签: iphone objective-c xcode uisearchbar

我已经实现了搜索栏,我想更改搜索栏的颜色。我怎么能这样做?

我试过了:

self.mySearchBar.backgroundColor = [UIColor redColor];

但没有成功。

更新(已解决):

在使用以下代码定义背景颜色之前,我必须删除默认背景颜色。

for (UIView *subview in mySearchBar.subviews) {
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview removeFromSuperview];
        break;
    }
} 

...所以代码就是下一个:

  for (UIView *subview in mySearchBar.subviews) {
      if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
          [subview removeFromSuperview];
          break;
      }
  } 

  self.mySearchBar.backgroundColor = [UIColor redColor];

8 个答案:

答案 0 :(得分:25)

尝试:

self.mySearchBar.barTintColor = [UIColor redColor];

答案 1 :(得分:6)

self.mySearchBar.backgroundColor = [UIColor redColor]; 

不会做任何事情,

self.mySearchBar.tintColor = [UIColor redColor]; 

意志!

答案 2 :(得分:2)

    self.mySearchBar.backgroundVolor = [UIColor redColor];

“Volor”或“Color

  self.mySearchBar.backgroundColor = [UIColor redColor];

另外,如果你想给它着色:

根据文档:https://developer.apple.com/iphone/library/documentation/UIKit/Reference/UISearchBar_Class/Reference/Reference.html,UISearchBar类上有一个tintColor属性。

在TableSearch示例中:https://developer.apple.com/library/ios/#samplecode/TableSearch/在MainView.xib中定义并加载搜索栏。如果你想改变它的tintColor或样式,只需在xib中进行,它就会被加载到应用程序中。

但改变背景颜色的唯一真实方法是覆盖它,看看下面问题的答案

UISearchBar clear background color or set background image [iphone sdk]

答案 3 :(得分:2)

我不确定自iOS7以来它是否有所改变,但似乎搜索显示控制器中的搜索栏需要一个额外的循环来正确删除UISearchBarBackground视图。

我创建了一个递归方法来正确清理搜索栏。

- (void) removeUISearchBarBackgroundInViewHierarchy:(UIView *)view
{
    for (UIView *subview in [view subviews]) {
        if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
            [subview removeFromSuperview];
            break; //To avoid an extra loop as there is only one UISearchBarBackground
        } else {
            [self removeUISearchBarBackgroundInViewHierarchy:subview];
        }
    }
}

您只需将搜索栏发送到方法并稍后更改颜色,就像上面的建议答案一样。

[self removeUISearchBarBackgroundInViewHierarchy:self.searchDisplayController.searchBar];
self.searchDisplayController.searchBar.backgroundColor = yourUIColor;

答案 4 :(得分:1)

searchBar.barTintColor =  UIColor.redColor()

答案 5 :(得分:0)

试试这个代码,它对我来说很好。

for( UIView* v in [parent subviews] ) { 
if( [v isKindOfClass:[UISearchBar class]] ) {
  [(UISearchBar*)v  setTintColor:[UIColor blackColor]];
}

答案 6 :(得分:0)

如果您遇到顶线和底线问题,请尝试删除UISearchBarBackground:

Spock::SpockConnector
Spock::Report
Spock::Bridge
Spock::Metric

答案 7 :(得分:0)

我必须将UISearchBar的searchBarStyle设置为.default,否则无效。