UINavigationItem中的SearchBar

时间:2011-08-09 03:01:22

标签: iphone ios uinavigationcontroller uisearchbar uinavigationitem

我使用以下代码在UINavigationItem中添加了一个搜索栏:

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
searchBar.delegate = self;
self.navigationItem.titleView = searchBar;
self.navigationItem.title = self.category.title;
[searchBar release];

但结果用户界面是这样的:

enter image description here

如何更改搜索栏的颜色并使其与导航栏的背景相同?

感谢。

2 个答案:

答案 0 :(得分:4)

对于UINavigationBar,有多种方法可以操作它的背景颜色:

  1. 将tintColor属性设置为您需要的颜色。
  2. 按照建议的修改方式应用自定义渐变或其他图案图像 - http://leonov.co/2011/04/uinavigationbar-and-uitoolbar-customization-ultimate-solution/
  3. 对于搜索栏,tintColor也可用。但在你的情况下,我建议继承UISearchBar形式并提供如下所示的实现,以完全摆脱背景绘制程序。在这种情况下,您将在透明工具栏上获得搜索栏,并且您将需要仅管理UINavigationBar颜色。

    //TransparentSearchBar.m
    
    @interface TransparentSearchBar()
    - (void)removeBackgroundView;
    @end
    
    @implementation TransparentSearchBar
    
    - (id)init
    {
        self = [super init];
    
        if(self) {
            [self removeBackgroundView];
        }
    
        return self;
    }
    
    - (id)initWithCoder:(NSCoder *)aDecoder 
    {
        self = [super initWithCoder:aDecoder];
    
        if(self) {
            [self removeBackgroundView];
        }
    
        return self;
    }
    
    - (id)initWithFrame:(CGRect)frame 
    {
        self = [super initWithFrame:frame];
    
        if(self) {
            [self removeBackgroundView];
        }
    
        return self;
    }
    
    - (void)removeBackgroundView 
    {
        for (UIView *view in self.subviews)
        {
            if ([view isKindOfClass:NSClassFromString
                 (@"UISearchBarBackground")])
            {
                [view removeFromSuperview];
                break;
            }
        }
    }
    
    @end
    

答案 1 :(得分:0)

如果您在UISearchBar上看到文档,则它具有属性“tintColor”。 将其设置为导航栏的颜色。

如果您不知道导航栏的颜色,请获取navigationBar的tintColor。

您可能还希望使用搜索栏的“半透明”属性。可能会更好地工作。