• 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
  • 相关阅读:
    2017.12.16 扫雷小游戏未完成
    2017.12.15 计算机算法分析与设计 枚举
    2017.12.14 Java实现-----图书管理系统
    2017.12.13 Java中是怎样通过类名,创建一个这个类的数组
    2017.12.12 基于类的面向对象和基于原型的面向对象方式比较
    2017.12.11 String 类中常用的方法
    2017.12.10 Java写一个杨辉三角(二维数组的应用)
    2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序
    spring boot compiler 版本实践
    spring boot 首次请求Controller慢
  • 原文地址:https://www.cnblogs.com/yuen/p/5033887.html
Copyright © 2020-2023  润新知