UISearchDisplayController简单使用

最近在做一个简单的app入门,中间有一个页面用到了搜索框,本来以为很简单的控件,没想到用到的时候才发现很麻烦。

搜索框使用过程大约有以下几个状态:不活跃-活跃-输入关键词-根据关键词动态列出相关结果-选中搜索结果或取消搜索

 

// ViewController.h
#import
<UIKit/UIKit.h> @interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate>
//相关协议
@property (strong, nonatomic) NSMutableArray *dataList;//搜索数据源 @property (strong, nonatomic) NSMutableArray *searchList;//搜索结果 @property (strong, nonatomic) UITableView *tableView;//数据源tableview @end
// ViewController.m
#import
"ViewController.h" @interface ViewController () @property (nonatomic) UISearchDisplayController *searchDisplayController; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.dataList = [NSMutableArray arrayWithCapacity:10]; self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 104, self.view.bounds.size.width, self.view.bounds.size.height - 40)]; for (NSInteger i = 0; i < 10; i++) { [self.dataList addObject:[NSString stringWithFormat:@"%ld-yang",i]]; } self.tableView.delegate = self; self.tableView.dataSource = self; UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 64, self.view.bounds.size.width, 40)]; [searchBar setPlaceholder:@"关键字搜索"]; searchBar.delegate = self; [self.view addSubview:searchBar]; self.searchDisplayController = [[UISearchDisplayController alloc]initWithSearchBar:searchBar contentsController:self]; _searchDisplayController.delegate = self; [_searchDisplayController.searchResultsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; _searchDisplayController.searchResultsTableView.dataSource = self; _searchDisplayController.searchResultsTableView.delegate = self; [self.view addSubview:self.tableView]; }- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  
if (tableView == self.searchDisplayController.searchResultsTableView) { return [self.searchList count]; }else{ return [self.dataList count]; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; if (cell == nil) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; }
if (tableView == self.tableView){//判断当前tableview是否为搜索结果 [cell.textLabel setText:self.dataList[indexPath.row]]; }else{ [cell.textLabel setText:self.searchList[indexPath.row]]; } return cell; }
//协议方法:开始搜索
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { NSLog(@"search begin"); searchBar.frame = CGRectMake(0, 20, 320, 44); [self.searchDisplayController setActive:YES]; return YES; }
//协议方法:搜索结束
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { NSLog(@"search end"); searchBar.frame = CGRectMake(0, 64, 320, 44); [self.searchDisplayController setActive:NO]; return YES; }
//关键词变化时实时更新搜索结果
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { NSPredicate *preicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c]%@",searchString];   

  //清空结果数组 [self.searchList removeAllObjects];
//过滤数据 NSArray *a = [_dataList filteredArrayUsingPredicate:preicate]; self.searchList = [NSMutableArray arrayWithArray:a]; //刷新表格 return YES; } @end

 

转载于:https://www.cnblogs.com/yuen/p/5033887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值