Измените стиль таблицы поиска searchDisplayController для группировки?
У меня есть searchDisplayController
, который ищет a UITableView
.
После ввода условий поиска я могу увидеть еще один UITableView
, содержащий результаты поиска. Однако я хочу, чтобы этот UITableView
был GROUPED, а не PLAIN (как и по умолчанию).
Как это сделать?
Ответы
Ответ 1
Если - как и я - вы думаете, что простой 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
В конце концов, самое простое решение часто является лучшим...
Ответ 2
Это сработало для меня (iOS 5.0):
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
forKey:@"_searchResultsTableViewStyle"];
Ответ 3
Это работает для меня:
Создайте класс, который расширяет 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.
Ответ 4
Вы можете попытаться создать подкласс UISearchDisplayController и сделать searchResultsTableView доступным для поиска
в любом файле .h добавьте:
@interface YourUISearchDisplayController : UISearchDisplayController {
UITableView * searchResultsTableView;
}
@property (nonatomic) UITableView * searchResultsTableView;
@end;
Затем используйте вместо этого параметр "Использовать свой UISearchDisplayController" вместо UISearchDisplayController.
Примечание. Возможно, вам придется использовать (неатомные, сохраняемые), (неатомные, назначать) или (неатомные, копии). Я не уверен.
Ответ 5
Это невозможно, так как свойство searchResultsTableView
readonly
.
Ответ 6
Переопределение -searchResultsTableView
не будет работать, потому что UISearchDisplayController
напрямую обращается к своей переменной экземпляра таблицы, не вызывая метод.
Назначенный инициализатор для UISearchDisplayController
представляется приватным методом -initWithSearchBar:contentsController:searchResultsTableViewStyle:
, который устанавливает переменную экземпляра _searchResultsTableViewStyle
. Эта переменная экземпляра используется при создании представления таблицы результатов поиска. Открытый инициатор вызывает этот метод, передавая UITableViewStylePlain
.
Прямо вызов частного назначенного инициализатора или установка переменной экземпляра, скорее всего, приведет к отклонению приложения от App Store, поэтому вместо этого вы можете попробовать переопределить открытый инициализатор и вызвать
[self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
forKey:@"searchResultsTableViewStyle"];