IOS UI-UISearchController

ViewController.m
  1 //
  2 //  ViewController.m
  3 //  IOS_0224_查找联系人
  4 //
  5 //  Created by ma c on 16/2/24.
  6 //  Copyright © 2016年 博文科技. All rights reserved.
  7 //
  8 
  9 #import "ViewController.h"
 10 #import "SearchResultsVC.h"
 11 
 12 @interface ViewController ()<UITableViewDataSource>
 13 
 14 @property (nonatomic, strong) UITableView *tableView;
 15 @property (nonatomic, strong) NSArray *keys;
 16 @property (nonatomic, strong) NSDictionary *dict;
 17 
 18 @property (nonatomic, strong) UISearchController *searchCtr;
 19 
 20 @end
 21 
 22 @implementation ViewController
 23 
 24 - (void)viewDidLoad {
 25     [super viewDidLoad];
 26     [self createUI];
 27     
 28 }
 29 
 30 - (NSArray *)keys
 31 {
 32     if (_keys == nil) {
 33         NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];
 34         self.dict = [NSDictionary dictionaryWithContentsOfFile:path];
 35         _keys = [[self.dict allKeys] sortedArrayUsingSelector:@selector(compare:)];
 36     }
 37     return _keys;
 38 }
 39 
 40 - (NSDictionary *)dict
 41 {
 42     if (_dict == nil) {
 43         NSString *path = [[NSBundle mainBundle] pathForResource:@"sortednames" ofType:@"plist"];
 44         self.dict = [NSDictionary dictionaryWithContentsOfFile:path];
 45     }
 46     return _dict;
 47 }
 48 
 49 - (void)createUI
 50 {
 51     [self setupTableView];
 52     [self setupSearchVC];
 53 }
 54 
 55 - (void)setupTableView
 56 {
 57     self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
 58     self.tableView.backgroundColor = [UIColor groupTableViewBackgroundColor];
 59     self.tableView.dataSource = self;
 60     [self.view addSubview:self.tableView];
 61 }
 62 
 63 - (void)setupSearchVC
 64 {
 65     SearchResultsVC *resultVC = [[SearchResultsVC alloc] initWithDict:self.dict keys:self.keys];
 66     self.searchCtr = [[UISearchController alloc] initWithSearchResultsController:resultVC];
 67     
 68     self.searchCtr.searchResultsUpdater = resultVC;
 69 
 70     self.searchCtr.searchBar.placeholder = @"请输入搜索内容";
 71     [self.searchCtr.searchBar sizeToFit];
 72     self.tableView.tableHeaderView = self.searchCtr.searchBar;
 73 }
 74 
 75 #pragma mark - UITableViewDataSource
 76 
 77 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 78 {
 79     return self.keys.count;
 80 }
 81 
 82 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 83 {
 84     NSString *key = self.keys[section];
 85     NSArray *value = self.dict[key];
 86     
 87     return [value count];
 88 }
 89 
 90 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 91 {
 92     static NSString *identifier = @"cellIdentifier";
 93     
 94     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
 95     
 96     if (!cell) {
 97         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
 98     }
 99     NSString *key = self.keys[indexPath.section];
100     NSArray *value = self.dict[key];
101 
102     cell.textLabel.text = value[indexPath.row];
103     return cell;
104 }
105 
106 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
107 {
108     return self.keys[section];
109 }
110 - (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView
111 {
112     return self.keys;
113 }
114 
115 @end
SearchResultsVC.m
 1 //
 2 //  SearchResultsVC.m
 3 //  IOS_0224_查找联系人
 4 //
 5 //  Created by ma c on 16/2/24.
 6 //  Copyright © 2016年 博文科技. All rights reserved.
 7 //
 8 
 9 #import "SearchResultsVC.h"
10 
11 @interface SearchResultsVC ()
12 
13 @property (strong, nonatomic) NSDictionary *dict;
14 @property (strong, nonatomic) NSArray *keys;
15 @property (strong, nonatomic) NSMutableArray *searchList;
16 
17 @end
18 
19 @implementation SearchResultsVC
20 
21 - (instancetype)initWithDict:(NSDictionary *)dict keys:(NSArray *)keys {
22     if (self = [super initWithStyle:UITableViewStylePlain]) {
23         self.dict = dict;
24         self.keys = keys;
25         self.searchList = [[NSMutableArray alloc] init];
26     }
27     return self;
28 }
29 
30 - (void)viewDidLoad {
31     [super viewDidLoad];
32 }
33 
34 - (void)updateSearchResultsForSearchController:(UISearchController *)searchController
35 {
36     NSString *searchString = [searchController.searchBar text];
37     NSLog(@"searchString:%@",searchString);
38     [self.searchList removeAllObjects];
39     
40     if (searchString.length > 0) {
41 
42 //        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@",searchString];
43         NSPredicate *predicate =
44         [NSPredicate predicateWithBlock:^BOOL(id  _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
45             
46             NSRange range = [evaluatedObject rangeOfString:searchString
47                                         options:NSCaseInsensitiveSearch];
48             
49             return range.location != NSNotFound;
50         }];
51 
52         for (NSString *key in self.keys) {
53             NSArray *matches = [self.dict[key]
54                                 filteredArrayUsingPredicate: predicate];
55             [self.searchList addObjectsFromArray:matches];
56         }
57         [self.tableView reloadData];
58     }
59 }
60 
61 #pragma mark - UITableViewDataSource
62 
63 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
64     return [self.searchList count];
65 }
66 
67 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
68     
69     static NSString *identifier = @"cellIdentifier";
70     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
71     
72     if (!cell) {
73         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
74     }
75     cell.textLabel.text = self.searchList[indexPath.row];
76     return cell;
77 }
78 @end
原文地址:https://www.cnblogs.com/oc-bowen/p/5216732.html