// UI1_UITableViewSearchController//// Created by zhangxueming on 15/7/15.// Copyright (c) 2015年 zhangxueming. All rights reserved.//#import "AppDelegate.h"#import "ViewController.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. ViewController *root = [[ViewController alloc] init]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:root]; self.window.rootViewController = nav; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeK
//// ViewController.m// UI1_UITableViewSearchController//// Created by zhangxueming on 15/7/15.// Copyright (c) 2015年 zhangxueming. All rights reserved.//#import "ViewController.h"@interface ViewController (){ UITableView *_tableView;//表视图 NSMutableArray *_dataList;//数据源 //UISearchDisplayController UISearchController *_searchController;//搜索控制器 NSMutableArray *_searchList;//搜索的结果}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self createData]; [self createUI];}- (void)createData{ _dataList = [NSMutableArray array]; _searchList = [NSMutableArray array]; for (int i='A'; i<='Z'; i++) { NSMutableArray *array = [NSMutableArray array]; for (int j=0; j<5; j++) { NSInteger num = arc4random()%50+1; NSString *name = [NSString stringWithFormat:@"人物%d:name%ld",j,num]; [array addObject:name]; } [_dataList addObject:array]; }}- (void)createUI{ _tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; [self.view addSubview:_tableView]; //创建搜索控制器, nil 表示在当前view上显示搜索结果 _searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; //更新搜索结果 _searchController.searchResultsUpdater = self; //隐藏导航栏 _searchController.hidesNavigationBarDuringPresentation = NO; //背景变暗 _searchController.dimsBackgroundDuringPresentation = NO; //添加searchBar CGRect frame = _searchController.searchBar.frame; frame.size.height = 44; _searchController.searchBar.frame = frame; _tableView.tableHeaderView = _searchController.searchBar;}#pragma mark ---UITableView代理---//返回分区的个数- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ if(_searchController.active) { return 1; } else { return _dataList.count; }}//返回分区中的行数- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ //_dataList[section] <==> [_dataList objectAtIndex:section]; if (_searchController.active) { return _searchList.count; } return [_dataList[section] count];}//创建cell- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellId = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId]; } cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; if (_searchController.active) { cell.textLabel.text = _searchList[indexPath.row];//[_searchList objectAtIndex:indexPath.row]; } else { cell.textLabel.text = _dataList[indexPath.section][indexPath.row]; } return cell;}//设置分区的头标题- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ if (_searchController.active) { return @"搜索结果"; } return [NSString stringWithFormat:@"%c",(char)(section+'A')];}//设置分区头的高度- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 50;}//设置分区索引- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ if(_searchController.active) { return nil; } NSMutableArray *titles = [NSMutableArray array]; [titles addObject:UITableViewIndexSearch]; for (int i='A'; i<='Z'; i++) { [titles addObject:[NSString stringWithFormat:@"%c",(char)i]]; } return titles;}- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{ return index-1;}//更新搜索结果- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{ [_searchList removeAllObjects]; //NSPredicate 谓词语法 //过滤数据 NSString *searchString = _searchController.searchBar.text; for (int i=0; i<_dataList.count; i++) { NSInteger count = [[_dataList objectAtIndex:i] count]; for (NSInteger j=0; j
eyAndVisible]; return YES; } // // ViewController.h // UI1_UITableViewSearchController // // Created by zhangxueming on 15/7/15. // Copyright (c) 2015年 zhangxueming. All rights reserved. // #import@interface ViewController : UIViewController @end