zoukankan      html  css  js  c++  java
  • 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 allocinit];

    //可以加入搜索範圍選項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(6040260self.myTableView.frame.size.height);

        

        mySearchDisplayController = [[UISearchDisplayController allocinitWithSearchBar: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(00320self.myTableView.frame.size.height);

        return YES;

    }

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

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

        self.myTableView.frame = CGRectMake(6040260self.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 textscope:

    [[self.searchDisplayController.searchBar scopeButtonTitles]

      objectAtIndex:searchOption]];

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

        return YES;

    }

  • 相关阅读:
    【HDU 5750】Dertouzos(数学)
    【OpenJ_POJ C16D】Extracurricular Sports(构造,找规律)
    【CodeForces 266C】Below the Diagonal(模拟)
    【CodeForces 261B】Maxim and Restaurant(DP,期望)
    【ACdream 1187】Rational Number Tree(树,递归)
    A1231. Crash的数字表格(贾志鹏)
    [精准]圆周率
    poj1743 Musical Theme
    3343: 教主的魔法[分块]
    [HNOI2008]玩具装箱toy
  • 原文地址:https://www.cnblogs.com/king1596/p/2784102.html
Copyright © 2011-2022 走看看