UITableView滚动在搜索后永远不会结束

时间:2013-12-19 09:42:11

标签: objective-c uitableview

我有UITableView来显示数组中的大量单词。

我还在表格视图的顶部提供搜索栏,这样当人们在文本框搜索中键入单词时,我的代码就开始从数组中过滤数据。

我的结果很好,但即使只有一行,我在tableview中的滚动也永远不会结束。 我的tableview结果可以向下和向下滚动,没有任何行。

我不知道我的桌面视图发生了什么。

我已实施的代码。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    if(self.tableView == tableView){
        return [self.alphabet count];
    }else{
        return 1;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (self.tableView == tableView) {
        return [[self.vocabularyInfo objectAtIndex:section] count];
    }else{
        return [self.filteredVocabs count];
    }
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [self.alphabet objectAtIndex:section];
}

 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    if(self.tableView == tableView){
         return self.alphabet;
    }else{
        return nil;
    }
}

//显示单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"CommentTableCell";
    //-- try to get a reusable cell --
    CommentTableCell *cell = (CommentTableCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    //-- create new cell if no reusable cell is available --
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:cellIdentifier owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    VocabularyController *vc;

    // Display word from database else display vocabulary when searching
    if (tableView != self.searchDisplayController.searchResultsTableView) {
        vc = [self.vocabularyInfo[indexPath.section] objectAtIndex:indexPath.row];
    }else{
        vc = [self.filteredVocabs objectAtIndex:indexPath.row];
    }

    cell.nameLabel.text = vc.korean;

    return cell;
}

//我用于过滤数组以显示结果的方法

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
    if (searchString.length > 0) {
        NSArray *vocabToSearch = self.vocabularyInfo;
        if (self.currentSearchString.length > 0 && [searchString rangeOfString:self.currentSearchString].location == 0) {
            vocabToSearch = self.filteredVocabs;
        }
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"korean CONTAINS[cd] %@", searchString];
        self.filteredVocabs = [vocabToSearch filteredArrayUsingPredicate:predicate];
    } else {
        self.filteredVocabs = self.vocabularyInfo;
    }
    self.currentSearchString = searchString;

    return YES;
}

请帮助我!!

2 个答案:

答案 0 :(得分:0)

检查tableview的数据源委托功能。 也许有关您的实施的更多细节是有帮助的。

答案 1 :(得分:0)

请使用以下方法检查您要返回的行数:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section