一、UI方面

1、創建、設置大小等與一般控件相同。

2、背景顏色

直接設置背景顏色searchBar.backgroundColor= [UIColor redColor]是沒有用的,需要設置背景圖片,即backgroundImage屬性,可以用一張純色的背景圖,來取代backgroundColor。很多朋友想着那不是需要讓美工製作一張純色圖片?這裏為大家提供一個方法,根據你需要的顏色和尺寸,返回一張純色圖片

– (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的知識。當前,完全可以給UIImage寫一個分類,把方法寫進分類里,便於其它類裏面使用這個方法。於是,設置背景圖片就變成了很簡單的一句話:

searchBar.backgroundImage = [self imageWithColor:[UIColor redColor] size:CGSizeMake(1,1)];

備註:當為UISearch設置背景圖時,它會把圖片拉伸鋪滿,所以上面那個方法中純色圖片的size可以隨便給。效果圖如下:


3、設置佔位文字

[email protected]”搜索”;

4、UISearch上的小圖標

4.1、BookmarkButton

searchBar.showsBookmarkButton = YES;

效果如下:


4.2、SearchResultsButton

searchBar.showsSearchResultsButton = YES;

效果如下:


4.3、CancelButton

searchBar.showsCancelButton = YES;

效果如下:


以上三個按鈕,都可以通過代理方法監聽到點擊事件。目前大多數用戶的習慣,或者說多數軟件的做法,BookmarkButton、SearchResultsButton已經基本上不用了,採取的做法是,默認情況不显示取消按鈕,在用戶輸入文字的同時,显示取消按鈕,並同步處理搜索事件,點擊取消按鈕清空文字,退回鍵盤,隱藏取消按鈕。上述交互方式,需要代理方法的配合,在後文中會詳細講解。

5、取消按鈕文字大小、顏色

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class],nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor grayColor],NSForegroundColorAttributeName,[UIFont systemFontOfSize:13.0],NSFontAttributeName,nil] forState:UIControlStateNormal];

此方法會全局改,工程內所有的UISearchBar的顏色都會改變,如果只想在某個控制器內改變文字顏色,可以在控制器的dealloc方法或者viewWillDisappear方法里,用上面的方法把顏色改回去(默認是白色),或者,自定義一個類(例如YYSearchBar)繼承自UISearchBar,再修改YYSearchBar的取消文字顏色。

6、searchBarStyle

提供了UISearchBarStyleDefault,UISearchBarStyleProminent,UISearchBarStyleMinimal三個值供選擇,使用前兩個值時,搜索框顏色(不是整體的背景顏色)是白色,使用第三個值是,搜索框顏色會比你的整體背景顏色深一點,例如

searchBar.searchBarStyle=UISearchBarStyleMinimal;

searchBar.backgroundImage= [self imageWithColor:[UIColor redColor] size:CGSizeMake(1,1)];

此時的效果


而我把背景圖片改成深灰色時(style沒變),

searchBar.backgroundImage= [self imageWithColor:[UIColor grayColor] size:CGSizeMake(1,1)];

此時的效果


對,就是這麼神奇。


二、功能方面

蘋果已經提供了足夠的代理方法,可以在用戶開始輸入、文字改變、點擊取消按鈕、點擊“勾”按鈕等時候通過代理方法“做事”,當然,需要設置searchBar.delegate=self並遵守UISearchBarDelegate協議。下面說說怎麼使用代理方法,達到上文提到的交互效果:默認情況不显示取消按鈕,在用戶輸入文字的同時,显示取消按鈕,並同步處理搜索事件,點擊取消按鈕清空文字,退回鍵盤,隱藏取消按鈕。

//點擊取消按鈕時執行此方法

-(void)searchBarCancelButtonClicked:(UISearchBar*)searchBar

{

        [email protected]””;//把文字置空

        self.searchBar.showsCancelButton=NO;//隱藏取消按鈕

        [self.searchBar resignFirstResponder];//退回鍵盤

        //處理結束搜索引起的其它事情,例如刷新界面吧啦吧啦。。。

}

//搜索框開始編輯時調用

-(void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar

{

      self.searchBar.showsCancelButton=YES;//显示取消按鈕

}

//搜索框結束編輯時調用(例如可以在用戶點擊屏幕內其它地方時,讓搜索框結束編輯)

– (void)searchBarTextDidEndEditing:(UISearchBar*)searchBar

{

        if([searchBar.text isEqualToString:@””]) {//如果沒有文字,才隱藏取消按鈕

                self.searchBar.showsCancelButton=NO;

        }else{

                self.searchBar.showsCancelButton=YES;

        }

}

-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)searchText

{

        //處理搜索事件。。。

}

當然,如果開發需要展示“勾”或者“書”圖標,並在點擊這兩個按鈕時才開始搜索,蘋果也提供了相應的代理方法

– (void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{}

– (void)searchBarBookmarkButtonClicked:(UISearchBar*)searchBar{}