UISearchController使用方法

林氏智造 于 2017-04-07 发布 3110 人已阅

在进行ios开发的时候,有时候涉及到搜索功能,实现搜索功能的方法有很多,可以是用自定义的搜索控件,也可以用sdk提供的UISearchController(ios8以后)、UISearchDisplayController(ios8之前)。

UISearchController使用方法

视图控制器需要实现UISearchBarDelegate, UISearchResultsUpdating协议中相关方法。

@interface ViewController () <UISearchBarDelegate, UISearchResultsUpdating>

实例化UISearchController

UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

设置self为更新搜索结果对象

searchController.searchController.searchResultsUpdater = self;

searchResultsUpdater是UISearchController中的一个属性,遵循了协议UISearchResultsUpdating。

这个协议允许类接收UISearchBar文本变化的通知。过一会就要使用这个协议。

设置搜索背景为灰色

searchController.searchController.dimsBackgroundDuringPresentation = FALSE;

将搜索栏放到表视图的表头中

self.tableView.tableHeaderView = self.searchController.searchBar;

协议

实现UISearchBarDelegate协议方法

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
    [self updateSearchResultsForSearchController:self.searchController];
}

这个代理方法会在用户切换scope bar的时候通知viewController,当它触发时,直接执行[self updateSearchResultsForSearchController:self.searchController]。

实现UISearchResultsUpdating协议方法

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    NSString *searchString = searchController.searchBar.text;
    //查询
    self.listContacts = [self findContactsByName:searchString];
    [self.tableView reloadData];
}

updateSearchResultsForSearchController(_:)是UISearchResultsUpdating协议中唯一一个是必须实现的方法。

现在,无论用户怎样修改search bar的文本,UISearchController都会通过这个方法告MasterViewController。

标签

您可能感兴趣的文章

iOS导航控制器—UINavigationController使用详解

UINavigationController用来管理视图控制器,在多视图控制器中常用。它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹...

ios中如何进行字符串的比较

进入了ios开发领域,木有objective-c 开发基础,凭着php开发流程经验学习开发ios各种伤不起,就连个字符串比较都写得那么蛋疼!