2012-12-29 34 views
0

我在我的搜索栏中有两个范围:城市和教堂。每次执行搜索时,两个范围都会显示空白单元格,但它们确实有搜索结果。我如何显示其相应的单元名称?谢谢!如何显示范围内的搜索结果?

我想通这个问题是在我的cellForRowAtIndexPath

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    if ([searchBar.scopeButtonTitles isEqual: @"City"]) { 
     cell.textLabel.text = [[filteredResult objectAtIndex: indexPath.row] objectForKey: @"Places"]; 
    } 

    else if ([searchBar.scopeButtonTitles isEqual: @"Church"]) { 
     cell.textLabel.text = [[filteredResult objectAtIndex: indexPath.row] objectForKey: @"Church"]; 
    } 
} 

else { 
    ... 
} 

[cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator]; 
return cell; 

这是我的搜索:

- (void)filterListForSearchText:(NSString *)searchText scope:(NSString *)scope 
{ 
    [filteredResult removeAllObjects]; 

    if ([scope isEqualToString: @"City"]) { 
     for (NSDictionary *dictionarySearch in allRegion) { 
      for (NSDictionary *citySearch in [dictionarySearch objectForKey: @"Cities"]) { 
       [citySearch objectForKey: @"Cities"]; 
       NSRange rangeSearch = [[citySearch valueForKey: @"Places"] rangeOfString: searchText options: (NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; 
       if (rangeSearch.location != NSNotFound) { 
        [filteredResult addObject: citySearch]; 
       } 
      } 
     } 
    } 

    if ([scope isEqualToString: @"Church"]) { 
     for (NSDictionary *dictionarySearch in allRegion) { 
      for (NSDictionary *citySearch in [dictionarySearch objectForKey: @"Cities"]) { 
       for (NSDictionary *churchSearch in [citySearch objectForKey: @"Churches"]) { 
        [churchSearch objectForKey: @"Churches"]; 
        NSRange rangeSearch = [[churchSearch valueForKey: @"Church"] rangeOfString: searchText options: (NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; 
        if (rangeSearch.location != NSNotFound) { 
         [filteredResult addObject: churchSearch]; 
        } 
       } 
      } 
     } 
    } 
} 
+1

谢谢@Foram的修正。 ;) – Jahm

回答

0

我找到了我的问题的答案。

的cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     if (searchBar.selectedScopeButtonIndex == 0) { 
      cell.textLabel.text = [[filteredResult objectAtIndex: indexPath.row] objectForKey: @"Places"]; 
     } 

     else if (searchBar.selectedScopeButtonIndex == 1) { 
      cell.textLabel.text = [[filteredResult objectAtIndex: indexPath.row] objectForKey: @"Church"]; 
     } 
    } 

    else { 
     ... 
    } 

    [cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator]; 
    return cell; 
} 

searchBar.selectedScopeButtonIndex == 0对于范围为市searchBar.selectedScopeButtonIndex == 1的范围教派

0

希望This Example会帮助你。 只需在链接示例中的“searchResults”的“filterContentForSearchText”中放置“if”和“else if”的东西,那肯定会起作用。

+0

正如你所看到的,你的filterContentForSearchText和我的filterListForSearchText是一样的。唯一的区别是你使用的是NSPredicate,而我没有。我仍然不明白。 :( – Jahm