转自: 阅微草堂
UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField. 要IB中没有直接操作背景的属性。
方法一:是直接将
方法二:是创建一个UIView设置其颜色加载到UISearchBarBaceGround上作为UISearchBar的背景颜色
方法一:
UISearchBar *seachBar=[[UISearchBar alloc] init];
//修改搜索框背景
seachBar.backgroundColor=[UIColor clearColor];
//去掉搜索框背景
//1.
[[searchbar.subviews objectAtIndex:0]removeFromSuperview];
//2.
for (UIView *subview in seachBar.subviews)
{
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
{
[subview removeFromSuperview];
break;
}
}
//3自定义背景
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"40-di.png"]];
[mySearchBar insertSubview:imageView atIndex:1];
[imageView release];
//4输入搜索文字时隐藏搜索按钮,清空时显示
- (BOOL)searchBarShouldBeginEdit
searchBar.showsScopeBar = YES;
[searchBar sizeToFit];
[searchBar setShowsCancelButton:YES animated:YES];
return YES;
}
- (BOOL)searchBarShouldEndEditin
searchBar.showsScopeBar = NO;
[searchBar sizeToFit];
[searchBar setShowsCancelButton:NO animated:YES];
return YES;
}
//改变搜索按钮文字
//改变UISearchBar取消按钮字体
for(id cc in [searchBar subviews])
{
if([cc isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)cc;
[btn setTitle:@"搜索" forState:UIControlStateNormal];
}
方法二:
UISearchBar* m_searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 44, 320, 41)];
m_searchBar.delegate = self;
m_searchBar.barStyle =UIBarStyleBlackTransluce
m_searchBar.autocorrectionType = UITextAutocorrectionType
m_searchBar.autocapitalizationType = UITextAutocapitalization
m_searchBar.placeholder = _(@"Search");
m_searchBar.keyboardType = UIKeyboardTypeDefault;
//--->背景图片
UIView *segment = [m_searchBar.subviews objectAtIndex:0];
UIImageView *bgImage = [[UIImageView alloc] initWithImage: [UIImageimageNamed:@"Images/search_bar_bg.png"]];
[segment addSubview: bgImage];
//<---背景图片
[self.view addSubview:m_searchBar];
[m_searchBar release];
ios系统升级到7.1后,原来在7.0下显示正常的UISearchbar现在又出现问题了。究其原因,是由于UISearchbar的subview又做修改了。
float version = [[[UIDevice currentDevice]systemVersion] floatValue];
if ([mySearchBarrespondsToSelector:@selector(barTintColor)]) {
float iosversion7_1 = 7.1;
if (version >= iosversion7_1)
{
//iOS7.1
[[[[mySearchBar.subviewsobjectAtIndex:0] subviews] objectAtIndex:0]removeFromSuperview];
[mySearchBar setBackgroundColor:[UIColor clearColor]];
}
else
{
//iOS7.0
[mySearchBar setBarTintColor:[UIColor clearColor]];
[mySearchBar setBackgroundColor:[UIColor clearColor]];
}
}
else
{
//iOS7.0以下
[[mySearchBar.subviews objectAtIndex:0] removeFromSuperview];
[mySearchBar setBackgroundColor:[UIColor clearColor]];
}