Я знаю, что это длинная рецензия, но это всего лишь одна проблема, которую я обещаю.
Настройка
Я получаю очень странное поведение с 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, ничего не происходит. Я могу полностью отменить редактирование перед нажатием, но я хочу, чтобы редактирование все еще существовало, когда они перемещаются назад.
Что я делаю неправильно? Есть ли лучший способ сделать это?