美文网首页UISearchController
UISearchController浅析-中篇

UISearchController浅析-中篇

作者: 杭研融合通信iOS | 来源:发表于2016-08-25 09:09 被阅读1115次

    上篇对UISearchBar+UISearchDisplayController做了简单概述,本篇将介绍故事的主人公-UISearchController。


    1.UISearchController概述

    官方对UISearchController的定义如下:

    A UISearchController object manages the display of search results based on interactions with a search bar. You use a search controller in tandem with your existing view controllers. When you have a view controller with searchable content, incorporate the search bar of a UISearchController object into your view controller’s interface. When the user interacts with that search bar, the search controller automatically displays a new view controller with the search results that you specify.

    UISearchController是一个视图控制器,本身已经自带了一个UISearchBar,可以设置一个自定义的ViewController来显示搜索结果。可以说整一个搜索流程可以通过UISearchController单独完成,不需要依赖原视图控制器。


    2.UISearchController使用

    官方对UISearchController的使用方法也有详细的说明,同样也结合Demo讲讲我的思路。

    第一步:自定义显示搜索结果的ViewController,通常搜索结果会以列表的方式展示,所以一般使用UITableViewController作为基类,或者用UIViewController作为基类,里面自定义UITableView也是可以的。本例选择自定义SearchResultTableVC类,继承自UITableViewController:

    SearchResultTableVC *_searchResultTableVC;

    第二步:在主视图控制器初始化UISearchController和SearchResultTableVC:

    _searchResultTableVC= [[SearchResultTableVC alloc] init];

    _searchResultTableVC.delegate=self;

    _searchController= [[UISearchController alloc] initWithSearchResultsController:_searchResultTableVC];

    _searchController.searchResultsUpdater=_searchResultTableVC;

    (1)SearchResultTableVC定义了一个delegate,用来定义点击搜索结果后的回调;

    (2)self指的是主视图控制器,具体实现SearchResultTableVC中的回调方法;

    (3)声明_searchResultTableVC成为_searchController监听输入内容的代理。

    第三步:在SearchResultTableVC中(非主视图控制器)实现UISearchResultsUpdating和搜索逻辑

    #pragma mark - UISearchResultsUpdating

    - (void)updateSearchResultsForSearchController:(UISearchController*)searchController

    {

    // 实现搜索逻辑代码

    }

    第四步:在SearchResultTableVC中(非主视图控制器)展示搜索结果:

    //搜索结果数组

    NSMutableArray*_searchResultArray;

    实现上一步的搜索逻辑后,本例将结果保存到_searchResultArray。

    // 搜索完成后可别忘记刷新tableview

    [self.tableview reloadData];

    #pragma mark - UITableViewDataSource,UITableViewDelegate

    - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

    {

    return _searchResultArray.count;

    }

    - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

    {

    // 根据自己的需要去展示cell

    return cell;

    }

    - (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

    {

    [tableViewdeselectRowAtIndexPath:indexPathanimated:YES];

    [_searchDisplayControllersetActive:NO];

    // 实现选择某个结果后的逻辑代码

    }

    显示结果的方式与上篇UISearchDisplayController如出一撤,只是使用UISearchController不再需要主视图控制器去显示搜索结果,具体原因将在下一篇文章中具体解释。

    相关文章

      网友评论

        本文标题:UISearchController浅析-中篇

        本文链接:https://www.haomeiwen.com/subject/yfnosttx.html