UISearchBar作為搜索條有的時候我們需要做一些自定的內(nèi)容,讓它看著有點(diǎn)與眾不同,先來看一張效果圖:

SearBar.gif
第一個搜索框自定義設(shè)置的比較多,顏色設(shè)置的有點(diǎn)夸張,僅供參考,設(shè)置過程如下:
1.設(shè)置默認(rèn)的搜索文字
self.searchBar.placeholder = @"FlyElephant";
2.設(shè)置取消按鈕的文字及顏色
self.searchBar.cancelTitle = @"中山郎";
self.searchBar.tintColor = [UIColor greenColor];
3.設(shè)置搜索框邊框及光標(biāo)顏色:
UITextField *searchField = [self.searchBar valueForKey:@"searchField"];
if (searchField) {
[searchField setBackgroundColor:[UIColor whiteColor]];
searchField.layer.cornerRadius = 13.0f;
searchField.layer.borderColor = [UIColor redColor].CGColor;
searchField.layer.borderWidth = 1;
searchField.layer.masksToBounds = YES;
//光標(biāo)顏色
[searchField setTintColor:[UIColor blueColor]];
}
4.取消默認(rèn)的灰色背景區(qū)域
self.searchBar.backgroundImage = [[UIImage alloc] init];
5.隱藏取消按鈕:
self.nextSearchBar.showsCancelButton=NO;
6.設(shè)置輸入文本的大小及顏色:
self.searchBar.textColor=[UIColor redColor];
self.searchBar.textFont=[UIFont systemFontOfSize:14];
7.設(shè)置迷你搜索框:
self.nextSearchBar.searchBarStyle=UISearchBarStyleMinimal;
第一步和第六步中的屬性是通過分類實(shí)現(xiàn):
@implementation UISearchBar (FESearchBar)
-(NSString *)cancelTitle {
return [objc_getAssociatedObject(self, cancelTitleKey) string];
}
-(void)setCancelTitle:(NSString *)cancelTitle {
if (IS_IOS9) {
[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTitle:cancelTitle];
}else {
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:cancelTitle];
}
objc_setAssociatedObject(self,cancelTitleKey,cancelTitle, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(UIFont *)textFont {
return objc_getAssociatedObject(self, textFontKey);
}
-(void)setTextFont:(UIFont *)textFont {
if (IS_IOS9) {
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]].font = textFont;
}else {
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setFont:textFont];
}
objc_setAssociatedObject(self,textFontKey,textFont, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(UIColor *)textColor{
return objc_getAssociatedObject(self, textColorKey);
}
-(void)setTextColor:(UIColor *)textColor {
if (IS_IOS9) {
[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]].textColor = textColor;
}else {
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:textColor];
}
objc_setAssociatedObject(self,textColorKey,textColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
如果有問題歡迎探討,代碼地址:FlyElephant的GitHub