美文网首页iOSiOS 搜索视图iOS学习总结
iOS-基础控件--搜索栏 UISearchController

iOS-基础控件--搜索栏 UISearchController

作者: 云之君兮鹏 | 来源:发表于2016-05-12 15:45 被阅读961次

    落花人独立,微雨燕双飞


    #import "ViewController.h"
    @interface ViewController ()<UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating >
    // 遵循的两个协议尖括号里面
    //下面是声明一个搜索栏
    @property (nonatomic,strong) UISearchController *searchController;
    //StoryBoard创建的tableView
    @property (strong, nonatomic) IBOutlet UITableView *tableView;
    //数据源数组
    @property (nonatomic,strong) NSMutableArray *dataList;
    //搜索到数据数组
    @property (nonatomic,strong) NSMutableArray *searchList; @end

    @implementation ViewController

    - (void)viewDidLoad {
    [super viewDidLoad];      
     [self createSearchBar];       
    [self createData];}`
    - (void)createSearchBar{    
    self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; 
    

    //设置显示搜索的控制器
    self.searchController.searchResultsUpdater = self;

    //设置开始搜索时背景显示与否(default is YES) self.searchController.dimsBackgroundDuringPresentation = NO;

    //展示时是否隐藏naviBar (default is YES) self.searchController.hidesNavigationBarDuringPresentation = NO;}
    - (void)createData{
    //将搜索栏设置为tableView的头部视图
    self.tableView.tableHeaderView = self.searchController.searchBar;
    //tableView代理
    self.tableView.delegate = self; self.tableView.dataSource = self;
    //初始化数据源数组
    self.dataList = [NSMutableArray arrayWithCapacity:0]; for (NSInteger i = 0; i < 100; i++) { [self.dataList addObject:[NSString stringWithFormat:@"骚韦 %ld号",i]]; }}
    //tableView @required

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{       
    if (self.searchController.active) {        
    return self.searchList.count;    }    
    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  (self.searchController.active) {       
     [cell.textLabel setText:self.searchList[indexPath.row]];    }else{       
     [cell.textLabel setText:self.dataList[indexPath.row]];}    
    return cell;}
    

    //updataSearchTesultsForSearchController 进行过滤
    - (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
    //获取searchBar搜索的内容
    NSString *searchString = self.searchController.searchBar.text;
    //谓词
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@", searchString];
    //判断搜索数组是否为空
    if (self.searchList != nil) { [self.searchList removeAllObjects]; }
    //使用谓词过滤数据
    self.searchList = [NSMutableArray arrayWithArray:[_dataList filteredArrayUsingPredicate:predicate]];
    //刷新
    [self.tableView reloadData];
    } @end

    下一篇是谓词的简单总结,希望大家多指正共同进步!!!

    相关文章

      网友评论

      • 一笑wangx:我想知道,搜索出来的结果怎么跳转到另一个界面
        云之君兮鹏: @梦醒wx 界面的通讯跳转就可以吧,我也是新手不知道说的对不
      • feng_dev://设置显示搜索的控制器
        self.searchController.searchResultsUpdater = self;

        这个要是设置 就说明 搜索的 全过程 都用的是一个 控制器 吗
        云之君兮鹏: @枫子哥 好的,谢谢您
        feng_dev:@云之君兮鹏 刚开始学么。那你这么多粉丝? 还是用一个控制器比较好,用两个的还要传值,好麻烦,一个 根据 active 属性 来判断 就行 挺好的
        云之君兮鹏:@枫子哥 您好,等我看看哈,我也是刚开始学
      • feng_dev:self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];

        是不是 这个 参数 为 nil 就是 没有 第二个控制器 ,这个参数 有 就是 有第二个 控制器
      • feng_dev:大神 ,我想知道 ,用search Controller 是要用两个 控制器 还是 就一个就行 我看别人 有 用 2个 控制器的
      • 走停2015_iOS开发:写的不错,有些地方再具体点就更好了
        走停2015_iOS开发:@走停2015 是的,不过总体思路明确
        云之君兮鹏:@走停2015 恩 总结起来的话 太费时间 时间充足的话 一定详细点 你说的是 搜索的那部分吗
      • 酷酷的哀殿: 为了方便读者阅读,建议您再修改一下文字排版

      本文标题:iOS-基础控件--搜索栏 UISearchController

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