Где установить contentView UISearchDisplayController, который был сделан в Интерфейсном Разработчике - PullRequest
0 голосов
/ 01 июня 2011

У меня есть UISearchBar в UIToolbar, к которому привязан UISearchDisplayController.Я бы хотел, чтобы результаты UISearchDisplayController отображались во всплывающем окне под UISearchBar, но у меня возникли проблемы с этим.Я почти уверен, что это потому, что там не установлен набор contentsController, но я не могу найти, где назначить contentController для UISearchDisplayController, который был создан в Интерфейсном Разработчике.Я попытался сделать это программно и вызвать initwithsearchbar: andcontentscontroller: но я думаю, что это будет работать, только если панель поиска и контроллер созданы программно, что я не хочу делать, любая помощь будет потрясающей!

1 Ответ

1 голос
/ 01 июня 2011

UISearchDisplayController предназначен только для для использования с другим UIViewController (contentsController, как вы упомянули). Хотя он может использоваться с любым UIViewController, его основное использование (и наименее болезненное использование) предназначено для использования с UITableViewController.

Предполагается, что contentsController "отвечает за управление исходным контентом, который нужно найти". Если контроллер не управляет коллекцией элементов, искать нечего. UITableView является основным стандартным контроллером, который управляет несколькими элементами.

Если ваш UISearchBar находится в UIToolbar, панель инструментов, скорее всего, находится в главном представлении, которым управляет UIViewController. Если вы программно получаете доступ к значению contentsController, доступному только для чтения, во время выполнения, я ожидаю, что вы найдете его.

Xcode4 (и, вероятно, InterfaceBuilder) создает множество соединений, когда вы просто помещаете этот контроллер поиска в кончик. Теперь они указывают на этого UIViewController (владельца файла?) И ожидают, что он реализует некоторые из совершенно дополнительных методов в протоколах UISearchBarDelegate и UISearchDisplayDelegate.

Вы, вероятно, хотите реализовать

- (void)searchBar:(UISearchBar *)searchBar 
    textDidChange:(NSString *)searchText {
  // called when text changes (including clear)
  NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
}

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

(удачи)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...