在objective-c的表视图中显示搜索结果

时间:2015-11-18 10:09:34

标签: ios objective-c uitableview uisearchbar

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

    - (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;
    }
    

2 个答案:

答案 0 :(得分:2)

您忘记了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开始使用tutorial

答案 1 :(得分:2)

您需要[tableView reloadData];方法的最后一个filterContentForSearchText

如果你不想使用UISearchController那么......   - 不推荐使用'UISearchDisplayController':首先在iOS 8.0中弃用 - UISearchDisplayController已替换为UISearchController

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

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