如何在xib的tableview中实现SearchBar和search显示控制器

我有字典的可变数组。我在表视图中显示该数组。

现在我想实现search和显示控制器到表视图。 怎么样?

任何build议或代码..

这里我的数组我按照字母顺序在uitableview中显示“name”键。

[ { "name": "Fish", "description": "sdhshs", "colorCode": null, }, { "name": "fry", "description": "sdhshs", "colorCode": null, }, { "name": "curry", "description": "sdhshs", "colorCode": null, } ], 

这是一个示例代码

 NSMutableArray *filteredResult; // this holds filtered data source NSMutableArray *tableData; //this holds actual data source -(void) filterForSearchText:(NSString *) text scope:(NSString *) scope { [filteredResult removeAllObjects]; // clearing filter array NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"SELF.restaurantName contains[c] %@",text]; // Creating filter condition filteredResult = [NSMutableArray arrayWithArray:[tableData filteredArrayUsingPredicate:filterPredicate]]; // filtering result } 

委托方法

 -(BOOL) searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self filterForSearchText:searchString scope:[[[[self searchDisplayController] searchBar] scopeButtonTitles] objectAtIndex:[[[self searchDisplayController] searchBar] selectedScopeButtonIndex] ]]; return YES; } -(BOOL) searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { [self filterForSearchText:self.searchDisplayController.searchBar.text scope: [[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]]; return YES; } 

在NSPredicate条件“@”中,SELF.restaurantName包含[c]%@“,文本”restaurantName是需要过滤的属性名称。 如果你的数据源数组中只有NSString,你可以使用@“SELF contains [c]%@”,text

一旦过滤完成,那么你需要相应地实现你的tableview委托。 像这样的东西

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(tableView == [[self searchDisplayController] searchResultsTableView]) { return [filteredResult count]; } else { return [tableData count]; } } 

比较tableview是否过滤tableview或原始tableview,并相应地设置tableview的委托和数据源。请注意,searchDisplayController是UIViewcontroller的可用属性,我们可以使用它来显示过滤的结果。

对于上述代码的工作,如果您在XIB或故事板中使用它,则需要使用“search栏和search显示”对象