UITableView глюк при прокрутке результатов поиска - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть таблица с панелью поиска. Использование панели поиска, кажется, хорошо, пока один не прокручивается к нижней части результатов. Я сделаю все возможное, чтобы объяснить.

Скажем, у меня есть таблица данных из 1000 объектов, и я набираю 'w' в строке поиска. 25 объектов, которые начинаются с буквы «W» отображаются. Я кликаю в таблицу и могу прокручивать вверх и вниз эти 25 объектов. Тем не менее, как только я добираюсь до дна и пытаюсь прокрутить последний объект, панель поиска, которая была статичной в верхней части, начинает прокручиваться вверх и исчезать, открывая «дублирующуюся» таблицу из этих 25 «w» объектов. ,

Я могу поместить 1-ую таблицу в верхнюю половину моего экрана и 2-ую таблицу в нижней половине и прокрутить их вверх и вниз по отдельности. Это действительно странно. Я понятия не имею, какой код должен мне пригодиться, но я буду рад опубликовать любой, если у кого-то есть идея.

Это явление не возникает при прокрутке до нижней части таблицы без возможности поиска.

Вот последовательность изображений в попытке прояснить проблему. фото

Обратный вызов в строке поиска:

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {

    [searchResult removeAllObjects];

    if ([searchText length] > 0) {
        isSearchOn = YES;
        canSelectRow = YES;
        self.tableView.scrollEnabled = YES;
        [self searchTableView];
    }
    else {        
        isSearchOn = NO;
        canSelectRow = YES;
        self.tableView.scrollEnabled = NO;
    }  
    [self.tableView reloadData];
}

- (void) searchTableView {
    NSString *sTemp = nil;
    NSArray *tempSectionArray = nil;    
    NSArray *tempEnglishArray = nil;
    NSString *firstLetter = [searchBar.text substringToIndex:1];

    //--- Only including W
    if ([firstLetter isEqualToString:@"W"] || 
        [firstLetter isEqualToString:@"w"]) {
        tempSectionArray = [NSArray arrayWithArray:[self.listSortByIndex objectAtIndex:23]];
        tempEnglishArray = [NSArray arrayWithArray:[self.listEnglish objectAtIndex:23]];
    }

    for (int i = 0; i < [tempEnglishArray count]; i++) {
        sTemp = [tempEnglishArray objectAtIndex:i];
        NSRange titleResultsRange = [sTemp rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
        if (titleResultsRange.length > 0)
            [searchResult addObject:[tempSectionArray objectAtIndex:i]];
    }   
}
...