使用UISearchBar可过滤TableView

使用UISearchBar可过滤TableView

我在目标c上还很新,所以希望这一切都有意义。我遵循了YouTube的video教程。该程序无法正常工作。
您可以从link下载项目。指导我
使该程序起作用。

最佳答案

在您的视图controller.h文件中

进口

@interface RecipeBookViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{

  NSArray *recipes;   //this is used for load the data to table
   NSArray *searchResults; //this is used for search the particular name in uitableview
}

@property (nonatomic, strong) UITableView *tableView;    //progrmatically allocationg the tableview


.m文件

@synthesize tableView;  //this is used accessing the name in more than one time


- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize table data

searchResults=[NSArray alloc]init];

recipes = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil];

//create the tableview
tableView =[[UITableView alloc]initWithFrame:CGRectMake(0, 163, 320, 317)];
tableView.delegate=self;
tableView.dataSource=self;
[self. tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];

[self.view addSubview: tableView];

}


//this is for loading the table data

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.searchDisplayController.searchResultsTableView) {
    return [searchResults count];

} else {
    return [recipes count];

}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

if (tableView == self.searchDisplayController.searchResultsTableView) {
    cell.textLabel.text = [searchResults objectAtIndex:indexPath.row];
} else {
    cell.textLabel.text = [recipes objectAtIndex:indexPath.row];
}

return cell;
}

//this is for search bar delegate method for filtering

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"SELF contains[cd] %@",
                                searchText];

searchResults = [recipes filteredArrayUsingPredicate:resultPredicate];
}

#pragma mark - UISearchDisplayController delegate methods
 -(BOOL)searchDisplayController:(UISearchDisplayController *)controller
 shouldReloadTableForSearchString:(NSString *)searchString
 {
 [self filterContentForSearchText:searchString
                           scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                  objectAtIndex:   [self.searchDisplayController.searchBar
                                                 selectedScopeButtonIndex]]];

return YES;
}


最后仅在视图顶部添加一个搜索栏显示控制器

关于ios - 使用UISearchBar可过滤TableView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22854720/

10-10 03:14