我无法在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中搜索。
答案 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"]]];
}
}
}
谢谢..