zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    215. Kth Largest Element in an Array
    B:魔兽世界之一:备战
    218. The Skyline Problem
    编程作业: 编程作业—类和对象
    239. Sliding Window Maximum
    313. Super Ugly Number
    hdu3068 manacher模板题
    fzu1901 kmp
    hdu2609 最小表示法
    hdu3374 kmp+最小表示法
  • 原文地址:https://www.cnblogs.com/yuen/p/5033887.html
Copyright © 2011-2022 走看看