У меня есть UISplitViewController
, у которого есть preferredDisplayMode = .AllVisible
. Here - это то, как я настроил свою раскадровку, заметьте, как контроллер детализации уже встроен в UINavigationController
.Как обеспечить, чтобы мой контроллер детального просмотра всегда был встроен в UINavigationController?
я выполнить следующий метод, когда определенная кнопка сливают в toolBar
от Master View Controller:
@IBAction func entertainmentBarButtonItemTapped(sender: AnyObject) {
self.showDetailViewController(self.storyboard!.instantiateViewControllerWithIdentifier("SearchViewController") as! SearchViewController, sender: sender)
}
Теперь это прекрасно работает на iPhone в портретном режиме, но и в ландшафтном режиме на iPhone 6 +, Я не вижу navigationBar
для контроллера детализации (только что представленного). Это не то поведение, которое я желаю. Обратите внимание, что контроллер подробных представлений по умолчанию встроен в UINavigationController
, так как вы можете себе представить, он выглядит непоследовательным, когда отсутствует navigationBar
.
Итак я пытаюсь следующий вместо:
@IBAction func entertainmentBarButtonItemTapped(sender: AnyObject) {
self.showDetailViewController(self.storyboard!.instantiateViewControllerWithIdentifier("NavigationSearchViewController") as! NavigationSearchViewController, sender: sender)
}
Теперь я заменить мою Detail View Controller с тем же ВК, как и раньше, но вместо того, чтобы вложить в UINavigationController
. Поведение работает, как и ожидалось, в режиме 6+ в ландшафтном режиме, так как в нем отображается navigationBar.
Но в портретном режиме я вижу сбойное поведение, потому что теперь, когда новый VC помещается в стек, я вижу, как toolBar
исчезают на исходном контроллере подробных представлений, вызывая странный переход, где явно ничего не происходит ,
Как правильно использовать showDetailViewController(..)
, чтобы у меня всегда был мой контроллер детального просмотра, встроенный в UINavigationController
, но без каких-либо нечетных переходов? Я думаю, это требует от меня изменения делегатов UISplitViewController, но я продолжаю получать «Can not push UINavigationController для стека». ошибка.
Edit: Единственный делегат я изменил:
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
//Since splitViewController!.showViewController changes secondaryViewController to no longer be a UINavigationController, this must first be checked for there to even be a BlankVC.
if let secondaryNavController = secondaryViewController as? UINavigationController {
if ((secondaryNavController.topViewController) != nil) {
return true
}
return false
}
В настоящее время я вижу такое же поведение.
Обновленный оригинальный пост, я не уверен, что такое masterNavController в вашем контексте. – AppreciateIt