第二次点击后搜索方法无效

时间:2012-07-08 14:43:52

标签: objective-c ios nsmutablearray uisearchdisplaycontroller

我的UISearchDisplayController出现问题,搜索无法正常运行。

这是我的代码:

    - (void)filterContentForSearchText:(NSString*)searchText 
                             scope:(NSString*)scope
{
    [self.searchResults removeAllObjects];

    for (int i = 0; i < [temp_category count]; i++) {
        BOOL foundResult = FALSE;

        if ([[temp_category objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_producttitle objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_type objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_description objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if (foundResult) {

            NSNumber *result = [NSNumber numberWithInt:i];
            if ([self searchResults] == nil) {
                NSMutableArray *array = [[NSMutableArray alloc] init];
                [self setSearchResults:array];
                [array release];
            }

                [searchResults addObject:result];

        }
    }

    NSLog (@"array = %i", [searchResults count]);
    NSLog(@"%@",searchResults);
}

    -(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString
{

    [self filterContentForSearchText:searchString 
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:[self.searchDisplayController.searchBar
                                                     selectedScopeButtonIndex]]]; 

    return YES;

}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] 
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:searchOption]]; 

    return YES;
}

但我仍然感到困惑,因为当我用第一个字母开始搜索时,它会给出正确的点击。但是当我输入第二个字母时,它只显示一个结果(据我所知,从我的数据样本中还有更多)。我做错了什么。我认为它与用户输入文本有关,但我很困惑我应该使用哪种方法。

我现在的代码是以下组合: this教程和 this那么问题。

有人能给我一个好方向的暗示吗?显示结果很好,只有这方面困扰我。我认为它与触发方法和[self.searchResults removeAllObjects];有关。

1 个答案:

答案 0 :(得分:1)

我想添加我的代码,但问题是我仍然使用上面的代码,但我手动实现UISearchBar(我在教程中的其他地方找到)而不是使用SearchDisplayController。使用SearchDisplayController时,导航栏也出现了问题,这让我有足够的理由自己实现它,而不是使用SearchDisplayController。它为您提供更多自由。

起初它似乎很多工作,所以我选择使用SearchDisplayController,但我真的建议任何需要修改的人,或者谁想要更多自由,请使用UISearchBar和UITableView手动执行:)