2016-04-25 2 views
3

При настройке строки поиска UISearchController в titleView navigationItem панель поиска не может быть отредактирована.Невозможно отредактировать UISearchController UISearchBar в navigationItem titleView

В моем представленииDidLoad Я настраиваю UISearchController.

self.searchViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([SearchViewController class])]; 
self.searchViewController.delegate = self; 
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchViewController]; 
self.searchController.delegate = self; 
self.searchController.searchResultsUpdater = self; 
self.searchController.searchBar.delegate = self; 
self.navigationItem.titleView = self.searchController.searchBar; 

Я не могу нажать панель поиска. Курсор не отображается и взаимодействие с пользователем отсутствует.

Как ни странно, если я инициализирую UISearchController локально, не устанавливая его для свойства, тогда я могу отредактировать строку поиска, просто никаких обратных вызовов делегатов.

self.searchViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([SearchViewController class])]; 
self.searchViewController.delegate = self; 
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchViewController]; 
searchController.delegate = self; 
searchController.searchResultsUpdater = self; 
searchController.searchBar.delegate = self; 
self.navigationItem.titleView = searchController.searchBar; 

Другое интересное поведение заключается в том, что кнопка очистки работает (если какой-либо текст установлен на панели поиска при инициализации).

+0

У меня такая же проблема, и ни один из предложенных ответов не работает. вам удалось найти решение для этого? –

+0

@ Сильвия Хишам да, что сработало для меня, в моем ответе ниже http://stackoverflow.com/a/36893699/4099344 – appsyoon

ответ

7

Я устанавливаю self.definesPresentationContext = YES; в контроллер контроллера, который представляет рассматриваемый контроллер.

Это должно быть установлено в self.definesPresentationContext = NO; в viewWillAppear:.

Теперь панель поиска в представленном контроллере просмотра может быть отредактирована.

+0

set self.definesPresentationContext = NO; в котором ViewController точно? тот, у которого есть UISearchController или тот, который до него? –

+1

@SilviaHisham Вы можете посмотреть мой ответ, чтобы уточнить http://stackoverflow.com/a/42148381/976628 –

0

В вашем первом блоке кода вы создаете экземпляр с идентификатором SearchViewController. Во втором вы используете HBSearchViewController. Это говорит о том, что может быть другая разница в вашем коде, кроме использования/не использования розетки.

+0

Извините, это моя ошибка. Я удалил префикс в первом блоке кода, забыл во втором. – appsyoon

1

Установите панель поиска для навигации зрения названия:

self.navigationItem.titleView = self.searchBarTop; 

затем просто установить этот вид либо кнопки влево/вправо на навигационной панели

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar]; 
self.navigationItem.rightBarButtonItem = searchBarItem; 

Я надеюсь, что это будет работать для вас !!

1

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

В моем случае у меня было приложение панели вкладок с моими пользовательскими контроллерами на вкладках, встроенными в навигационные контроллеры. Симптомы были точно такими же, строка поиска отображалась в области заголовка навигационной панели, но не была интерактивной.

Я обнаружил, что проблема заключалась в том, что я использовал свой собственный подкласс UITabBarController, и я переопределил метод viewWillAppear(animated:), но забыл вызвать super.viewWillAppear(animated:) в реализации. Дополнительным симптомом было то, что когда я переключал вкладки, панель поиска внезапно становилась интерактивной, и все работало нормально, только взаимодействие на начальной вкладке было отключено.

Надеюсь, это поможет кому-то.

4

У меня была та же проблема.

Представьте, что у вас есть FirstViewController и SecondViewController, а на стенде есть UISearchBar на titleView.

Чтобы устранить проблему, у меня был этот код для стенда UIViewController.

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    self.definesPresentationContext = true 

} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    self.definesPresentationContext = false 

} 
+1

Спасибо! ваш ответ - единственный, который работал на меня. –

Смежные вопросы