Почему мой вид таблицы поиска не появляется при начале поиска? - PullRequest
0 голосов
/ 19 марта 2012

Я включил UISearchDisplayController в свое приложение вместе с панелью поиска. Я инициализировал это так:

self.filteredObjectArray = [NSMutableArray arrayWithCapacity:[self.objectArray count]];

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 43)];
searchBar.delegate = self;
[self.view addSubview:searchBar];

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

Что я и видел в других примерах. Я также реализовал соответствующие методы делегата с важными методами filterContentForSearchText и mustReload *, показанными ниже:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{   
    [self.filteredObjectArray removeAllObjects]; // First clear the filtered array.

    for (XRay *xray in objectArray) {
        NSString *combinedLabel = [self combinedLabel:xray];
        if ([combinedLabel rangeOfString:searchText options:(NSCaseInsensitiveSearch)].location != NSNotFound) {
            [self.filteredObjectArray addObject:xray];
        }
    }
}

- (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;
}

Однако мой поиск не работает, когда я выделяю текстовое поле поиска или вводю какие-либо символы. Вы также заметите, что серое представление не отображается поверх моего обычного представления таблицы.

Screenshot

EDIT cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"XraySearchChoice";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    XRay *xray = nil;
    if (tableView == self.searchDisplayController.searchResultsTableView) {
        xray = [self.filteredObjectArray objectAtIndex:indexPath.row];

    } else {
        xray = [self.objectArray objectAtIndex:indexPath.row];
    }

    cell.textLabel.text = [self combinedLabel:xray];

    return cell;
}

Ответы [ 2 ]

2 голосов
/ 24 марта 2012

Я понял, что случилось, и я немного удивлен, если честно. Однажды я установил свойство в SearchTableViewController: @property (неатомный, сильный) UISearchDisplayController * searchDisplay;

И обновил мой код, чтобы использовать этот, все работало оттуда. Вот мой код инициализации с новым свойством.

- (void)viewDidLoad
{
    self.filteredObjectArray = [NSMutableArray arrayWithCapacity:[self.objectArray count]];

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 43)];
    searchBar.delegate = self;
    self.tableView.tableHeaderView = searchBar;

    self.searchDisplay = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];

    self.searchDisplay.delegate = self;
    self.searchDisplay.searchResultsDataSource = self;
    self.searchDisplay.searchResultsDelegate = self;
}
0 голосов
/ 19 марта 2012
Try with below code it will help you

 self.filteredObjectArray = [NSMutableArray arrayWithCapacity:[self.objectArray count]];
    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 43)];
    searchBar.delegate = self;
    //[self.view addSubview:searchBar];
    self.theTableView.tableHeaderView = searchBar;//theTableView your tableview object

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