IOS 7无法更改搜索栏的背景图像

时间:2014-04-22 11:31:07

标签: ios ios7 ios6 uisearchbar uisearchdisplaycontroller

我无法在IOS 7中自定义搜索栏。

我使用以下代码更改IOS6中的搜索栏背景

for (UIView * v in sarchBar.subviews)
{
    if ([v isKindOfClass:NSClassFromString(@"UISearchBarTextField")])
    {
        v.superview.alpha = 0;
        UIView *containerView = [[UIView alloc] initWithFrame:sarchBar.frame];
        [containerView addSubview:v];
        [self.view addSubview:containerView];
        [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor whiteColor]];
        [[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal];
    }
}

其次如果我自定义搜索控制器以删除搜索栏中的默认取消按钮,它在IOS6中正常工作,但是使用自定义搜索控制器它不会在IOS7中搜索。

3 个答案:

答案 0 :(得分:2)

如果您使用文本字段并更改背景图片会更好,因为它是子类并继承了相同的属性。

答案 1 :(得分:0)

编辑:我可能误解了原始问题。以下答案显示了如何从UITextField内安全地获取UISearchBar

回顾您的代码,看起来好像是在尝试直接修改UISearchBar的视图层次结构。我知道苹果在iOS 7中的其他UI元素上做了这样的事情(比如UIAlertView),但是我不确定他们是否对UISearchBar做了同样的事情。

关于取消按钮..您只能使用UISearchBar上的showsCancelButton属性吗?


我写了以下类别,试图从UITextField中获取UISearchBar

适用于iOS 7但未在6上测试(我不明白为什么不会)

<强>的UISearchBar + BSSearchBar.h

//
// Created by Liam Nichols on 07/04/2014.
// Copyright (c) 2014 Liam Nichols. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface UISearchBar (BSSearchBar)

- (void)setTextColor:(UIColor *)color;

- (UITextField *)internalTextField;

@end

<强>的UISearchBar + BSSearchBar.m

//
// Created by Liam Nichols on 07/04/2014.
// Copyright (c) 2014 Liam Nichols. All rights reserved.
//

#import "UISearchBar+BSSearchBar.h"


@implementation UISearchBar (BSSearchBar)

- (void)setTextColor:(UIColor *)color
{
    UITextField *textField = [self internalTextField];
    textField.textColor = color;
}

- (UITextField *)internalTextField
{
    return [UISearchBar findTextFieldInView:self];
}

+ (UITextField *)findTextFieldInView:(UIView *)view
{
    for (id subview in view.subviews)
    {
        if ([subview isKindOfClass:[UITextField class]])
        {
            return subview;
        }

        UITextField *subviewTextField = [UISearchBar findTextFieldInView:subview];
        if ([subviewTextField isKindOfClass:[UITextField class]])
        {
            return subviewTextField;
        }
    }
    return nil;
}

@end

希望有所帮助

答案 2 :(得分:0)

试试这个背景图片..我希望它有所帮助

 for(UIView *subView in [searchBarObj subviews]) {
    for(UIView *subSubView in [subView subviews]) {
        if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
            [(UITextField *)subSubView setBackgroundColor: [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]]];
        }
    }
  }  

谢谢..