Как реализовать UISearchDisplayController в UIViewController без Интерфейсного Разработчика - PullRequest
9 голосов
/ 07 мая 2011

У меня есть UIViewController, у которого в качестве свойства сгруппирована UITableView. Я создаю экземпляр UITableView в коде и не использую IB. Я хотел бы подключить к нему UISearchDisplayController, но не могу найти ни одного примера, как это можно сделать.

Это то, что у меня есть. // Реализовали UISearchDisplayDelegate в заголовочном файле

//SearchBar
UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 45)];
searchBar.barStyle=UIBarStyleBlackTranslucent;
searchBar.showsCancelButton=NO;
searchBar.autocorrectionType=UITextAutocorrectionTypeNo;
searchBar.autocapitalizationType=UITextAutocapitalizationTypeNone;
searchBar.delegate=self;


UISearchDisplayController *mySearchDisplayController = [[UISearchDisplayController alloc ]initWithSearchBar:searchBar contentsController:self];
self.searchDisplayController = mySearchDisplayController;  //Error here ?? self.searchDisplayController is ReadOnly and can't assign

[self.searchDisplayController setDelegate:self];
[self.searchDisplayController setSearchResultsDataSource:self];

[mySearchDisplayController release];
[myDisplayController release];

Похоже, это не работает, свойство searchDisplayController для UIViewController похоже только для чтения, и я не могу подключить myDisplayController к нему. Я действительно не уверен, что это правильный способ сделать это.

Я искал вокруг Google, чтобы найти какой-нибудь совет или руководство по использованию UISearchDisplayController в UIViewController. Все примеры, которые я мог найти, были о том, как внедрить это в UITableViewController с использованием IB, что я не хочу использовать.

Может кто-нибудь объяснить, как я мог заставить это работать?

Ответы [ 2 ]

23 голосов
/ 07 мая 2011

Вот код, который я использую. Поместите это в viewDidLoad UIViewController, который создает свой собственный UITableView. Я думаю, что часть, которую вы ищете, это добавить панель поиска в качестве заголовка представления таблицы.

UISearchBar * theSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0,0,320,40)]; // frame has no effect.
theSearchBar.delegate = self;
if ( !searchBarPlaceHolder ) {
    searchBarPlaceHolder = @"What are you looking for?";
}
theSearchBar.placeholder = searchBarPlaceHolder;
theSearchBar.showsCancelButton = YES;


self.theTableView.tableHeaderView = theSearchBar;

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

[searchController setActive:YES animated:YES];
[theSearchBar becomeFirstResponder];
5 голосов
/ 14 сентября 2013

См. Документы Apple:

@property(nonatomic, readonly, retain) UISearchDisplayController *searchDisplayController

Обсуждение: это свойство отражает значение выхода searchDisplayController, которое вы установили в Интерфейсном Разработчике.Если вы создаете свой контроллер отображения поиска программно, это свойство автоматически устанавливается контроллером отображения поиска при его инициализации .

...