繁体   English   中英

在Objective-C的表格视图中显示搜索结果

[英]display search result in table view in objective-c

  1. 我已经在View Controller中使用搜索栏创建了一个表视图,但是该表视图没有显示搜索结果。
  2. 这就是我的代码的工作方式。 首先,我创建一个数组以保存数据>>在表视图中显示数组数据>>使用搜索栏过滤表视图。

这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.inventoryarray =[[NSArray alloc] initWithObjects: @"apple",@"samsung",@"HTC",@"LG",@"Sony",@"Motorola",@"Nexus",@"Asus" ,nil];
    self.searchresult =[[NSArray alloc]init];    
    // Do any additional setup after loading the view, typically from a nib.
}

#pragma table View methods

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

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

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

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

#pragma search methods

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


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

你忘了refesh table数据

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

    self.searchresult = [self.inventoryarray filteredArrayUsingPredicate:resultPredicate];

    // you forget to reload Data
    [self.searchDisplayController.searchResultsTableView reloadData];
    // else use 

    [yourtableView reloadData];
}

建议: UISearchDisplayController已被弃用,使用UISearchController上起,对教程

您只需要[tableView reloadData]; filterContentForSearchText方法的最后。

如果您不想使用UISearchController,则...-不建议使用“ UISearchDisplayController”:在iOS 8.0中首先不建议使用-UISearchDisplayController已替换为UISearchController

如果您不想使用UISearchController使用以下方法:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {}并重新加载tableview。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM