• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
威猛的小老虎
博客园    首页    新随笔    联系   管理    订阅  订阅

UISearchBar 和 UISearchDisplayController的使用

之前比較少用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 = [[UISearchBar alloc] init];

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

    [mySearchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"First",@"Last",nil]];

    mySearchBar.delegate = self;

    [mySearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];

    [mySearchBar sizeToFit];

//將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 = [[UISearchDisplayController alloc] initWithSearchBar:mySearchBarcontentsController:self];

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

    [self setMySearchDisplayController:mySearchDisplayController];

[mySearchDisplayController setDelegate:self];

[mySearchDisplayController setSearchResultsDataSource:self];

    [mySearchDisplayController setSearchResultsDelegate: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);

    return YES;

}

 

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

 

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

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

    return YES;

}

 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller

shouldReloadTableForSearchString:(NSString *)searchString

{

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

    [self filterContentForSearchText:searchString scope:

[[self.searchDisplayController.searchBar scopeButtonTitles]

  objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

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

    return YES;

}

 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller

shouldReloadTableForSearchScope:(NSInteger)searchOption

{

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

    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:

[[self.searchDisplayController.searchBar scopeButtonTitles]

  objectAtIndex:searchOption]];

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

    return YES;

}

posted @ 2012-11-23 11:29  威猛的小老虎  阅读(1807)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3