UITableView и SearchBarController вид iPhone - PullRequest
0 голосов
/ 18 января 2012

Моя таблица находится в этом пользовательском интерфейсе:

enter image description here

Но когда я начинаю поиск, вид меняется как:

enter image description here

Я хочу, чтобы, когда пользователь начал поиск, представление должно быть таким же, как я использовал заголовки для разных полей, например, там должны быть заголовки и искомые данные должны отображаться под теми же заголовками на своем месте?

это возможно?

Я использую этот код:

В viewDidLoad:

// create a filtered list that will contain products for the search results table.
//filteredListItems = [NSMutableArray arrayWithCapacity:[listItems count]];
filteredListItems = [[NSMutableArray alloc] initWithCapacity:[self.listVehicles count]];

// restore search settings if they were saved in didReceiveMemoryWarning.
if (self.savedSearchTerm){
    [self.searchDisplayController setActive:self.searchWasActive];
    [self.searchDisplayController.searchBar setSelectedScopeButtonIndex:self.savedScopeButtonIndex];
    [self.searchDisplayController.searchBar setText:savedSearchTerm];

    self.savedSearchTerm = nil;
}

[listTable reloadData];

Тогда другой метод:

- (void)viewDidDisappear: (BOOL) анимированный {

self.searchWasActive = [self.searchDisplayController isActive];
self.savedSearchTerm = [self.searchDisplayController.searchBar text];
self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];}

В методах панели поиска:

//search bar implementation
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{        
NSPredicate *resultPredicate = [NSPredicate 
                                predicateWithFormat:@"SELF contains[cd] %@",
                                searchText];

self.filteredListItems = [self.listVehicles filteredArrayUsingPredicate:resultPredicate];}

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

Спасибо

1 Ответ

0 голосов
/ 18 января 2012

Вы должны реализовать UISearchBar без (!!!) контроллера SearchDisplayController.Перейдите к вашему файлу XIB, если вы ищете «панель поиска» в правой вкладке, вы получите 2 результата.Вы должны включить в свой проект только панель поиска.

другое решение, просто верните NO:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller    shouldReloadTableForSearchString:(NSString *)searchString {
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];    
return YES;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...