Подтвердить что ты не робот

UISearchController не отклоняется, когда View push

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

Настройка

Я получаю очень странное поведение с UISearchController. Позвольте мне описать иерархию, затем я объясню шаг за шагом, что происходит в моем видео:

Первое представление, которое вы видите, представляет собой обычный ViewController, с tableView и UISearchController как полностью отдельные объекты. У UISearchController есть свой собственный searchResultsController, который я устанавливаю при его создании:

let searchResultsController = MyResultsControllerClass()
searchController = UISearchController(searchResultsController: searchResultsController)

Это базовая настройка.

Поведение

Ссылка на видео о поведении

MyResultsControllerClass имеет tableView, а также указатель назад к контроллеру главного представления. Все эти представления размещены внутри. Когда поиск SearchController searchBar начинает поиск, вы видите, что отображается tableView. Затем я нажимаю результат, программируя клуб. MyResultsControllerClass использует указатель на главное представление, чтобы нажимать новый контроллер представления (только подробности об этом событии) следующим образом:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let activityDetail = ActivityDetailViewController(nibName: nil, bundle: nil, activity: searchResults[indexPath.row])
    parentController?.navigationController?.pushViewController(activityDetail, animated: true)
}

Вы можете видеть, что это происходит за поиском, но searchController не "закрыт" представленным представлением! Это моя проблема. Как вы можете видеть, я все еще могу взаимодействовать с ним. Когда я нажимаю "Отмена", он, наконец, исчезает.

Что я пробовал

Теперь я подумал, что это может быть связано с тем, что UISearchController на самом деле является UIViewController, если я правильно понимаю. Поэтому я попытался нажать из UISearchController, ничего не происходит. Я попытался внедрить UISearchController в свой собственный UINavigationController и нажав на searchController.navigationController, ничего не происходит. Я могу полностью отменить редактирование перед нажатием, но я хочу, чтобы редактирование все еще существовало, когда они перемещаются назад.

Что я делаю неправильно? Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

У меня такая же точная проблема, я решил ее, установив:

self.definesPresentationContext = YES;

на контроллере представления, который представляет UISearchController. Это рекомендуется Apple на WSDC-сессии 228, читайте здесь: http://asciiwwdc.com/2014/sessions/228.