UISearchBar 和 UISearchDisplayController的使用

使用UISearchBar和UISearchDisplayController实现搜索功能
本文详细介绍了如何在iOS应用中使用UISearchBar和UISearchDisplayController实现高效的搜索功能,包括如何在Interface Builder中直接使用,以及如何通过代码创建。文章还提供了示例代码,展示了如何设置搜索范围、调整表格视图的大小和位置,并实现了搜索栏的开始编辑和结束编辑的响应。此外,还介绍了如何为UISearchBar和UISearchDisplayController设置各种delegate,以便在搜索条件变化时触发相应的操作。

之前比較少用UISearchBar 和 UISearchDisplayController,最近閱讀了一些有關資料,簡單做個筆記:

1、UISearchBar 和 UISearchDisplayController在IB中是可以直接使用的,UISearchBar如果不指定delegate及執行相關的方法,那麼與一個TextField類似。加入一個UISearchDisplayController,它會附帶了一個UISearchBar,參考UISearchDisplayController Reference會發現,它其實還有一個searchResultTableView,用於顯示搜尋到的結果。所以,如果要使用UISearchDisplayController時,記得要設定TableView的兩個delegate。

2、以下例子使用代碼創建UISearchBar 和UISearchDisplayController,注意UISearchDisplayController的創建使用了以下的方法:

- (id)initWithSearchBar:(UISearchBar *)searchBar contentsController:(UIViewController *)viewController;


首先要在主ViewController中加入

<UISearchBarDelegate,UISearchDisplayDelegate,UITableViewDelegate,UITableViewDataSource>

並宣告了兩個物件:mySearchBar和 mySearchDisplayController,然後在.m文件中加入如下代碼:

mySearchBar= [[UISearchBaralloc]init];

//可以加入搜索範圍選項scope

[mySearchBarsetScopeButtonTitles:[NSArrayarrayWithObjects:@"First",@"Last",nil]];

mySearchBar.delegate=self;

[mySearchBarsetAutocapitalizationType:UITextAutocapitalizationTypeNone];

[mySearchBarsizeToFit];

//將UISearchBar加入View中,本例加入到一個TableView中,作為其HeadView

//[self.view addSubview:mySearchBar];

self.myTableView.tableHeaderView=mySearchBar;

//本例調整了TableView的大小和位置

self.myTableView.frame=CGRectMake(60,40,260,self.myTableView.frame.size.height);

mySearchDisplayController= [[UISearchDisplayControlleralloc]initWithSearchBar:mySearchBarcontentsController:self];

//以下一句代碼有點令人困惑,試過取消這句代碼,仍能正常運行

[selfsetMySearchDisplayController:mySearchDisplayController];

[mySearchDisplayControllersetDelegate:self];

[mySearchDisplayControllersetSearchResultsDataSource:self];

[mySearchDisplayControllersetSearchResultsDelegate:self];


3、以下加入UISearchBar 和 UISearchDisplayController 的一些delegate作為示範:

#pragma mark UISearchBar and UISearchDisplayController Delegate Methods

-(BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar{

//準備搜尋前,把上面調整的TableView調整回全屏幕的狀態,如果要產生動畫效果,要另外執行animation代碼

self.myTableView.frame=CGRectMake(0,0,320,self.myTableView.frame.size.height);

returnYES;

}

-(BOOL)searchBarShouldEndEditing:(UISearchBar*)searchBar{

//搜尋結束後,恢復原狀,如果要產生動畫效果,要另外執行animation代碼

self.myTableView.frame=CGRectMake(60,40,260,self.myTableView.frame.size.height);

returnYES;

}


- (BOOL)searchDisplayController:(UISearchDisplayController*)controller

shouldReloadTableForSearchString:(NSString*)searchString

{

//一旦SearchBar輸入內容有變化,則執行這個方法,詢問要不要重裝searchResultTableView的數據

[selffilterContentForSearchText:searchStringscope:

[[self.searchDisplayController.searchBarscopeButtonTitles]

objectAtIndex:[self.searchDisplayController.searchBarselectedScopeButtonIndex]]];

// Return YES to cause the search result table view to be reloaded.

returnYES;

}


- (BOOL)searchDisplayController:(UISearchDisplayController*)controller

shouldReloadTableForSearchScope:(NSInteger)searchOption

{

//一旦Scope Button有變化,則執行這個方法,詢問要不要重裝searchResultTableView的數據

[selffilterContentForSearchText:[self.searchDisplayController.searchBartext]scope:

[[self.searchDisplayController.searchBarscopeButtonTitles]

objectAtIndex:searchOption]];

// Return YES to cause the search result table view to be reloaded.

returnYES;

}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值