cellForRowAtIndexPath не вызывается из делегатов UISearchDisplayController - PullRequest
1 голос
/ 27 февраля 2012

РЕДАКТИРОВАТЬ: Спасибо за ответы ниже.Я не смог заставить UISearchDisplayController перезагрузить таблицу, поэтому я просто закончил вызовом методов фильтра, когда изменился текст поиска и изменился массив, используемый для заполнения таблицы.


У меня естьUISearchDisplayController добавлен к UITableView программно следующим образом (это использует Cocos2d).cellForRowAtIndexPath первоначально вызывается при загрузке представления, но cellForRowAtIndexPath не вызывается, когда делегаты поиска возвращают YES.

(self - это UIViewController)

    table = [[UITableView alloc] initWithFrame:CGRectMake(0.0f, 80.0f, 480.0f, 260.0f)];
    table.delegate = self;
    table.dataSource = self;
    [[[CCDirector sharedDirector] openGLView] addSubview:table];

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
    [searchBar sizeToFit];
    searchBar.delegate = self;
    searchBar.placeholder = @"Search";
    table.tableHeaderView = searchBar;

    UISearchDisplayController *searchDC = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
    searchDC.delegate = self;
    searchDC.searchResultsDataSource = self;
    searchDC.searchResultsDelegate = self;

//        [searchBar release];
//        [searchDC release];

Когда символ вводится в строку поиска, вызываются следующие делегаты, вызывается numberOfRowsInSection, но никогда не вызывается cellForRowAtIndexPath.

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    // Do filtering and add to the search array
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString scope:[[controller.searchBar scopeButtonTitles] objectAtIndex:[controller.searchBar selectedScopeButtonIndex]]];

    return YES;
}

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

    return YES;
}

1 Ответ

2 голосов
/ 27 февраля 2012

Просто проверьте следующие вещи:

1) делегат таблицы и источник данных установлены правильно.

2) При поступлении данные не пустые.

3) метод проверки numberOfRowsInSection: возврат правильного значения.

...