UISearchController

search.png

1、系統自帶搜索框
2、謂詞的使用

使用系統自帶搜索框UISearchController, 使用這個協議UISearchResultsUpdating ,dataArray存放原來的數據,searchArray存放過濾后的數據

//
//  ViewController.m
//  Search
//
//  Created by lxy on 16/5/29.
//  Copyright ? 2016年 lxy. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

/** 源數據 */
@property (nonatomic, strong) NSMutableArray *dataArray;

/** 搜索結果數組 */
@property (nonatomic, strong) NSMutableArray *searchArray;

/** 搜索框 */
@property (nonatomic, strong) UISearchController *searchC;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 初始化數據
    [self setupData];
    
    // 創建搜索框架
    [self setupSearchC];
    
    
    
    
}

#pragma mark - 搜索框
- (void)setupSearchC {
    
    _searchC = [[UISearchController alloc] initWithSearchResultsController:nil];
    
    _searchC.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 50);
    
    // 設置代理
    _searchC.searchResultsUpdater = self;
    
    // 不變灰
//    _searchC.dimsBackgroundDuringPresentation = NO;
    
    self.tableView.tableHeaderView = _searchC.searchBar;
    
}


- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    
    // 獲取搜索框里輸入的內容
    NSString *str = searchController.searchBar.text;
    NSLog(@"%@", str);
    
    // 過濾條件 [c] 不區分大小寫 * 通配符
    NSString *p = [NSString stringWithFormat:@"SELF LIKE[c] '*%@*'", str];
    
    // 創建謂詞
    NSPredicate *predicate = [NSPredicate predicateWithFormat:p];
    
    // 清空搜索數組
    [_searchArray removeAllObjects];
    
    self.searchArray = [NSMutableArray arrayWithArray:[_dataArray filteredArrayUsingPredicate:predicate]];
    
    
    
    [self.tableView reloadData];
}

#pragma mark - 初始化數據
- (void)setupData {
    // 獲取數據
    NSString *path = [[NSBundle mainBundle] pathForResource:@"search" ofType:@"plist"];
    
    _dataArray = [NSMutableArray arrayWithContentsOfFile:path];
}

#pragma mark - 數據源
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (_searchC.active) {
        
        return _searchArray.count;
    } else {
        
        return  _dataArray.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    
    if (_searchC.active) {
        cell.textLabel.text = _searchArray[indexPath.row];
    } else {
        cell.textLabel.text = _dataArray[indexPath.row];
    }
    return cell;
}

// 返回cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 64;
}

@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容