2015-01-02 2 views
5

Мне было интересно, можно ли активировать UISearchDisplayController с помощью кнопки на панели навигации, а не со стандартной строки поиска, которую вы получаете, когда вы вытаскиваете контролер панели поиска из объекта библиотеки в Xcode. Как эта функциональность в календарном приложении:UISearchDisplayController от кнопки не поля поиска по умолчанию

UISearchDisplayController in the Calendar app Вы можете получить кнопку, чтобы стрелять действие так:

[self.searchDisplayController setActive:YES animated:YES]; 

Но вы по-прежнему нуждаются в строку поиска, и это воодушевляет, откуда поиск бар. В идеале я бы хотел, чтобы он появился сверху, как в gif.

Любая помощь очень ценится. Дэвид.

+0

Просто создайте панель поиска. Установите фрейм, который будет отображаться на экране при загрузке. Удостоверьтесь, что у него было свойство выхода. Анимируйте его при нажатии кнопки и сделайте firstResponder – soulshined

ответ

7

Старый вопрос, но у меня есть ответ, поэтому я подумал, что это стоит пересматривают ...

В конце концов я использовал UISearchController, а не UISearchDisplayController.

Если вы хотите, чтобы активировать поиск, но не хотите панель поиска, все, что вам нужно сделать, это активировать поиск, используя

self.searchController.active = YES; 

, а затем, потому что нет бара поиска вы должны реализовать currentSearchController: методы протокола UISearchControllerDelegate самостоятельно.

- (void)presentSearchController:(UISearchController *)searchController { 
    [self.window.rootViewController presentViewController:self.searchController animated:YES completion:nil]; 
} 

Это не совсем имеет ту же анимацию, но я уверен, используя обычную вид контроллер анимации апи я могу получить что-то подобную работу.

+0

Спасибо за полезный ответ. У вас также возникла проблема с тем, что клавиатура не отображается автоматически? Я попытался вызвать 'self.searchController.searchBar startFirstResponder' в разных местах, но он работает только после завершения анимации представления. Таким образом, вначале сначала открывается панель поиска, затем клавиатура вставлена. Но я хочу, чтобы они анимировались за один раз. По какой-либо причине «searchBar.canBecomeFirstResponder» всегда «НЕТ» перед завершением анимации представления. Есть идеи? –

+0

Чтобы он работал так же, как и в приложении «Календарь», я представил контроллер поиска из того же контроллера представления, которому он принадлежит (т.е. «self» вместо 'self.window.rootViewController'), а также установите' searchController.hidesNavigationBarDuringPresentation = false 'и' searchController.searchBar.searchBarStyle = .prominent'. – maxkonovalov