iOS8之前我們使用UISearchDisplayController做TableView的本地搜索
iOS8提供實現搜索功能的SDK:UISearchController(iOS8.0之后)、UISearchDisplayController(iOS8.0之前,iOS8.0之后不建議再使用)。
遵守UISearchResultsUpdating協議
1 @interface ZWRecommendationFocusViewController()<UISearchResultsUpdating> 2 @property (strong, nonatomic) NSArray *list; 3 @property (strong, nonatomic) NSMutableArray *searchList; 4 @property (strong, nonatomic)UISearchController *searchController; 5 @end
1 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 2 { 3 return (!self.searchController.active)?1:1; 4 } 5 6 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 7 { 8 return (!self.searchController.active)?self.list.count:self.searchList.count; 9 } 10 11 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 12 { 13 ZWFocusList *list=(!self.searchController.active)?self.list[indexPath.row]:self.searchList[indexPath.row]; 14 static NSString *identifier = @"cell"; 15 ZWFocusListTableViewCell *cell = [ZWFocusListTableViewCell cellWithTableView:tableView identifier:identifier]; 16 cell.list = list; 17 return cell; 18 }
1 /** 2 * UISearchController作為UITableView的tableHeaderView 3 */ 4 -(void)addSearchBar 5 { 6 //創建UISearchController對象 7 UISearchController *searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; 8 //是否添加半透明覆蓋層。為YES,搜索時,背景會變暗(背景變模糊)。默認為YES 9 searchController.dimsBackgroundDuringPresentation = NO; 10 //是否隱藏導航欄。為YES,搜索時,UINavigationBar會隱藏。默認為YES 11 searchController.hidesNavigationBarDuringPresentation = YES; 12 //NO表示UISearchController在present時,可以覆蓋當前controller。默認為NO 13 searchController.definesPresentationContext = NO; 14 //搜索欄表頭視圖 15 self.tableView.tableHeaderView = searchController.searchBar; 16 17 [searchController.searchBar sizeToFit]; 18 searchController.searchResultsUpdater = self; 19 20 searchController.searchBar.placeholder=@"請輸入名稱或者數字"; 21 searchController.searchBar.autocapitalizationType=UITextAutocapitalizationTypeNone; 22 // searchController.searchBar.showsCancelButton=YES;//顯示取消按鈕 23 //自適應 24 [searchController.searchBar sizeToFit]; 25 // searchController.searchBar.frame = CGRectMake(0, 0, 0, 44); 26 // searchController.searchBar.prompt=@"請輸入關鍵字"; 27 self.searchController = searchController; 28 }
1 - (void)updateSearchResultsForSearchController:(UISearchController *)searchController{ 2 NSString *searchString = self.searchController.searchBar.text; 3 //NSPredicate 謂詞 4 NSPredicate *preicate = [NSPredicate predicateWithFormat:@"theme_name LIKE[c] %@", searchString]; 5 if (self.searchList!= nil) { 6 [self.searchList removeAllObjects]; 7 } 8 //過濾數據 9 self.searchList= [NSMutableArray arrayWithArray:[self.list filteredArrayUsingPredicate:preicate]]; 10 //刷新表格 11 [self.tableView reloadData]; 12 }
