一度苔、UI方面
1音诫、創(chuàng)建攻泼、設(shè)置大小等與一般控件相同。
2诡延、背景顏色
直接設(shè)置背景顏色searchBar.backgroundColor= [UIColor redColor]是沒(méi)有用的滞欠,需要設(shè)置背景圖片,即backgroundImage屬性孕暇,可以用一張純色的背景圖仑撞,來(lái)取代backgroundColor。很多朋友想著那不是需要讓美工制作一張純色圖片妖滔?這里為大家提供一個(gè)方法,根據(jù)你需要的顏色和尺寸桶良,返回一張純色圖片
- (UIImage *)imageWithColor:(UIColor*)color size:(CGSize)size{
? ? ? ?CGRect rect =CGRectMake(0,0, size.width, size.height);
? ? ? ?UIGraphicsBeginImageContext(rect.size);
? ? ? ?CGContextRef context =UIGraphicsGetCurrentContext();
? ? ? ?CGContextSetFillColorWithColor(context, [colorCGColor]);
? ? ? ?CGContextFillRect(context, rect);
? ? ? ?UIImage *image =UIGraphicsGetImageFromCurrentImageContext();?
? ? ? ?UIGraphicsEndImageContext();
? ? ? ?return image;
}
用到的是CoreGraphics的知識(shí)座舍。當(dāng)前,完全可以給UIImage寫一個(gè)分類陨帆,把方法寫進(jìn)分類里曲秉,便于其它類里面使用這個(gè)方法采蚀。于是,設(shè)置背景圖片就變成了很簡(jiǎn)單的一句話:
searchBar.backgroundImage = [self imageWithColor:[UIColor redColor] size:CGSizeMake(1,1)];
備注:當(dāng)為UISearch設(shè)置背景圖時(shí)承二,它會(huì)把圖片拉伸鋪滿榆鼠,所以上面那個(gè)方法中純色圖片的size可以隨便給。效果圖如下:
3亥鸠、設(shè)置占位文字
searchBar.placeholder=@"搜索";
4妆够、UISearch上的小圖標(biāo)
4.1、BookmarkButton
searchBar.showsBookmarkButton = YES;
效果如下:
4.2负蚊、SearchResultsButton
searchBar.showsSearchResultsButton = YES;
效果如下:
4.3神妹、CancelButton
searchBar.showsCancelButton = YES;
效果如下:
以上三個(gè)按鈕,都可以通過(guò)代理方法監(jiān)聽(tīng)到點(diǎn)擊事件家妆。目前大多數(shù)用戶的習(xí)慣鸵荠,或者說(shuō)多數(shù)軟件的做法,BookmarkButton伤极、SearchResultsButton已經(jīng)基本上不用了蛹找,采取的做法是,默認(rèn)情況不顯示取消按鈕哨坪,在用戶輸入文字的同時(shí)熄赡,顯示取消按鈕,并同步處理搜索事件齿税,點(diǎn)擊取消按鈕清空文字彼硫,退回鍵盤,隱藏取消按鈕凌箕。上述交互方式拧篮,需要代理方法的配合,在后文中會(huì)詳細(xì)講解牵舱。
5串绩、取消按鈕文字大小、顏色
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class],nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor grayColor],NSForegroundColorAttributeName,[UIFont systemFontOfSize:13.0],NSFontAttributeName,nil] forState:UIControlStateNormal];
此方法會(huì)全局改芜壁,工程內(nèi)所有的UISearchBar的顏色都會(huì)改變礁凡,如果只想在某個(gè)控制器內(nèi)改變文字顏色,可以在控制器的dealloc方法或者viewWillDisappear方法里慧妄,用上面的方法把顏色改回去(默認(rèn)是白色)顷牌,或者,自定義一個(gè)類(例如YYSearchBar)繼承自UISearchBar塞淹,再修改YYSearchBar的取消文字顏色窟蓝。
6、searchBarStyle
提供了UISearchBarStyleDefault,UISearchBarStyleProminent,UISearchBarStyleMinimal三個(gè)值供選擇饱普,使用前兩個(gè)值時(shí)运挫,搜索框顏色(不是整體的背景顏色)是白色状共,使用第三個(gè)值是,搜索框顏色會(huì)比你的整體背景顏色深一點(diǎn)谁帕,例如
searchBar.searchBarStyle=UISearchBarStyleMinimal;
searchBar.backgroundImage= [self imageWithColor:[UIColor redColor] size:CGSizeMake(1,1)];
此時(shí)的效果
而我把背景圖片改成深灰色時(shí)(style沒(méi)變)峡继,
searchBar.backgroundImage= [self imageWithColor:[UIColor grayColor] size:CGSizeMake(1,1)];
此時(shí)的效果
對(duì),就是這么神奇匈挖。
二碾牌、功能方面
蘋果已經(jīng)提供了足夠的代理方法,可以在用戶開(kāi)始輸入关划、文字改變小染、點(diǎn)擊取消按鈕、點(diǎn)擊“勾”按鈕等時(shí)候通過(guò)代理方法“做事”贮折,當(dāng)然裤翩,需要設(shè)置searchBar.delegate=self并遵守UISearchBarDelegate協(xié)議。下面說(shuō)說(shuō)怎么使用代理方法调榄,達(dá)到上文提到的交互效果:默認(rèn)情況不顯示取消按鈕踊赠,在用戶輸入文字的同時(shí),顯示取消按鈕每庆,并同步處理搜索事件筐带,點(diǎn)擊取消按鈕清空文字,退回鍵盤缤灵,隱藏取消按鈕伦籍。
//點(diǎn)擊取消按鈕時(shí)執(zhí)行此方法
-(void)searchBarCancelButtonClicked:(UISearchBar*)searchBar
{
? ? ? ? self.searchBar.text=@"";//把文字置空
? ? ? ? self.searchBar.showsCancelButton=NO;//隱藏取消按鈕
? ? ? ? [self.searchBar resignFirstResponder];//退回鍵盤
? ? ? ? //處理結(jié)束搜索引起的其它事情,例如刷新界面吧啦吧啦腮出。帖鸦。。
}
//搜索框開(kāi)始編輯時(shí)調(diào)用
-(void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar
{
? ? ? self.searchBar.showsCancelButton=YES;//顯示取消按鈕
}
//搜索框結(jié)束編輯時(shí)調(diào)用(例如可以在用戶點(diǎn)擊屏幕內(nèi)其它地方時(shí)胚嘲,讓搜索框結(jié)束編輯)
- (void)searchBarTextDidEndEditing:(UISearchBar*)searchBar
{
? ? ? ? if([searchBar.text isEqualToString:@""]) {//如果沒(méi)有文字作儿,才隱藏取消按鈕
? ? ? ? ? ? ? ? self.searchBar.showsCancelButton=NO;
? ? ? ? }else{
? ? ? ? ? ? ? ? self.searchBar.showsCancelButton=YES;
? ? ? ? }
}
-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)searchText
{
? ? ? ? //處理搜索事件。馋劈。攻锰。
}
當(dāng)然,如果開(kāi)發(fā)需要展示“勾”或者“書(shū)”圖標(biāo)妓雾,并在點(diǎn)擊這兩個(gè)按鈕時(shí)才開(kāi)始搜索娶吞,蘋果也提供了相應(yīng)的代理方法
- (void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{}
- (void)searchBarBookmarkButtonClicked:(UISearchBar*)searchBar{}