Не удалось отличить значение типа "UINavigationController"
Я реализую интерфейс поиска для своего приложения, поэтому в основном я передам ключевое слово поиска из одного ViewController в другой ViewController.
Я сделал этот тип параметров несколько раз, но на этот раз кажется странным. Целевой объект ViewController встроен в контроллер навигации.
Теперь код выглядит примерно так.
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject!) {
if (segue?.identifier == "home_to_search") {
var searchKeyword = txtSearchBarHome.text
var svc = segue?.destinationViewController as! SearchViewController;
svc.toPassSearchKeyword = searchKeyword;
//let nav = segue?.destinationViewController as! UINavigationController
//let svc = nav.topViewController as! SearchViewController
//svc.toPassSearchKeyword = searchKeyword;
}
}
Я уже изучил эти вопросы
DestinationViewController Segue и UINavigationController swift, Как изменить значения, когда мой ViewController встроен в UINavigationController? без удачи.
Что заставляет меня задаться вопросом, что у меня уже есть ViewControllers, встроенные в контроллеры навигации, которые я могу передавать параметры путем segueing. Однако в этом случае он выбрасывает Не может отличить значение типа "UINavigationController" . Если я пробую прокомментированный код выше, он не вызывает ошибку там, а в классе AppDelegate.
Ответы
Ответ 1
Отвечая на мой вопрос. В этом случае нам нужно получить доступ к дочернему виду, выполнив что-то вроде этого:
let nav = segue?.destinationViewController as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;
Ответ 2
На основе ответа Semih вы также можете сделать это, чтобы передать переменную в следующий сегмент, если вы не хотите использовать идентификатор:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nav = segue.destination as? UINavigationController,
let vc = nav.topViewController as? TestViewController {
vc.username = "Test"
}
}
Ответ 3
Просто быстрое примечание для тех, кто изучает эту проблему, она была переименована в Destination
let nav = segue.destination as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;