簡體   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