Изменить стиль табличного представления searchDisplayController на сгруппированный? - PullRequest
10 голосов
/ 26 сентября 2010

У меня есть searchDisplayController, который ищет UITableView.

. После ввода условий поиска я вижу еще один UITableView, который содержит результаты поиска.Тем не менее, я хочу, чтобы это UITableView было сгруппировано, а не PLAIN (как по умолчанию).

Как мне это сделать?

Ответы [ 6 ]

15 голосов
/ 21 марта 2012

Это сработало для меня (iOS 5.0):

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"_searchResultsTableViewStyle"];
14 голосов
/ 20 мая 2011

Если - как и я - вы думаете, что обычный TableView был слишком уродливым, вы также можете отказаться от использования SearchDisplayController.

Я просто:

  • вставлено в пустое представление searchBar и TableView , как мы обычно делаем для IBOutlet
  • выбрал владельца файла в качестве делегата для них обоих .
  • В начале номер секции равен 0 ([myTab count]), затем я использовал reloadData, и на этот раз myTab заполняется результатом.
  • [self.resultTableView reloadData];

Здесь вы можете найти все методы, которые я использовал от делегатов

@interface MyViewController : UIViewController <UIApplicationDelegate, UISearchBarDelegate> {

    IBOutlet UISearchBar *searchBar;
    IBOutlet UITableView *resultTableView;
}

@property (nonatomic, retain) IBOutlet UISearchBar *searchBar;
@property (nonatomic, retain) IBOutlet UITableView *resultTableView;

  //For your searchBar the 2 most important methods are
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBarClicked;
- (BOOL)searchBarTextDidEndEditing;


  //For your TableView the most important methods are in my case:

    //number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
    //HEADERS
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
    //different numbers of row by section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    //the cells themselves
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@end

В конце концов, самое простое решение часто является лучшим ...

3 голосов
/ 19 августа 2011

Это работает для меня:

Создайте класс, который расширяет UISearchDisplayController:

@interface RVSearchDisplayController : UISearchDisplayController
@end

@implementation RVSearchDisplayController

-(UITableView *) searchResultsTableView {
    [self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
            forKey:@"_searchResultsTableViewStyle"];
    return [super searchResultsTableView];
}

@end

Затем добавьте UISearchDisplayController к вашей таблице, используя IB, и измените его Custom Class на RVSearchDisplayController в Identity Inspector.

1 голос
/ 26 сентября 2010

Вы можете попытаться создать подкласс UISearchDisplayController и сделать searchResultsTableView доступным для поиска

в любом .h файле добавить:

@interface YourUISearchDisplayController : UISearchDisplayController {
   UITableView * searchResultsTableView;
}

@property (nonatomic) UITableView * searchResultsTableView;

@end;

Тогда просто используйте YourUISearchDisplayController вместо oD UISearchDisplayController.

Примечание. Возможно, вам придется использовать (неатомный, сохранить), (неатомный, назначить) или (неатомный, скопировать). Я не совсем уверен

0 голосов
/ 03 августа 2011

Переопределение -searchResultsTableView не будет работать, потому что UISearchDisplayController обращается к своей переменной экземпляра табличного представления напрямую, без вызова метода.

Указанный инициализатор для UISearchDisplayController представляется закрытым методом -initWithSearchBar:contentsController:searchResultsTableViewStyle:, который устанавливает переменную экземпляра _searchResultsTableViewStyle. Эта переменная экземпляра используется при создании представления таблицы результатов поиска. Открытый инициализатор вызывает этот метод, передавая UITableViewStylePlain.

Прямой вызов частного назначенного инициализатора или установка переменной экземпляра, скорее всего, приведет к отклонению приложения из App Store, поэтому вместо этого вы можете попробовать переопределить общедоступный инициализатор и вызвать

[self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"searchResultsTableViewStyle"];
0 голосов
/ 26 сентября 2010

Это невозможно, поскольку свойство searchResultsTableView равно readonly.

...