Изменить searchDisplayController таблицу, чтобы сгруппировать?
У меня есть searchDisplayController
, который ищет UITableView
.
После ввода условий поиска я вижу другой UITableView
, содержащий результаты поиска. Однако я хочу, чтобы это UITableView
было сгруппировано, а не просто (как по умолчанию).
Как мне это сделать?
6 ответов:
Если-как и я-вы считаете, что простой TableView был слишком уродливым, вы также можете отказаться от использования SearchDisplayController.
Я просто:
- вставил в пустое представление панель поиска и 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
Это сработало для меня (iOS 5.0):
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; [self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped] forKey:@"_searchResultsTableViewStyle"];
Это работает для меня:
Создайте класс, который расширяет UISearchDisplayController:
@interface RVSearchDisplayController : UISearchDisplayController @end @implementation RVSearchDisplayController -(UITableView *) searchResultsTableView { [self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped] forKey:@"_searchResultsTableViewStyle"]; return [super searchResultsTableView]; } @end
Затем добавьте
UISearchDisplayController
в таблицу с помощью IB и измените его пользовательский класс наRVSearchDisplayController
в Identity Inspector.
Можно попробовать создать подкласс UISearchDisplayController и сделать searchResultsTableView доступным для поиска
В любом .h file add:
@interface YourUISearchDisplayController : UISearchDisplayController { UITableView * searchResultsTableView; } @property (nonatomic) UITableView * searchResultsTableView; @end;
Тогда просто используйте YourUISearchDisplayController вместо od UISearchDisplayController.
Примечание: возможно, вам придется использовать (неатомный, сохранить), (неатомный, назначить) или (неатомный, скопировать). Я не совсем уверен
Переопределение
-searchResultsTableView
не будет работать, потому чтоUISearchDisplayController
обращается к своей переменной экземпляра табличного представления напрямую, без вызова метода.Назначенный инициализатор для
UISearchDisplayController
, по-видимому, является частным методом-initWithSearchBar:contentsController:searchResultsTableViewStyle:
, который задает переменную экземпляра_searchResultsTableViewStyle
. Эта переменная экземпляра используется при создании табличного представления результатов поиска. Открытый инициализатор вызывает этот метод, передаваяUITableViewStylePlain
.Прямой вызов частного назначенного инициализатора или установка переменной экземпляра, скорее всего, приведет к получить отклоненное приложение из App Store, поэтому вместо этого можно попробовать переопределить открытый инициализатор и вызвать
[self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped] forKey:@"searchResultsTableViewStyle"];