2014-12-01 2 views
1

Я использую ниже код, чтобы попытаться изменить отображаемое ViewController в UINavigationController:UINavigationController topViewController не отображается

var mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 

var navigationController:UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("navController") as UINavigationController 
var homeViewController: UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeView") as UIViewController 

navigationController.popViewControllerAnimated(false) 
navigationController.pushViewController(homeViewController, animated: false) 

var topController = navigationController.topViewController as UIViewController 
println("homeview id:\(homeViewController.restorationIdentifier)") 
println("topview id: \(topController.restorationIdentifier)") 

здесь раскадровка:
enter image description here
Первый вопрос: Почему когда Я удаляю вызов функции popViewControllerAnimated в этом примере, верхний вид все еще является LoginView, даже если я нажал HomeView? (Не должен ли он быть последним нажатым контроллером вида?)
Второй вопрос: Когда я сохраняю вызов функции popViewControllerAnimated, я получил правый верхний вид (мой topView теперь HomeView, как ожидалось), но отображаемый ViewController на экран по-прежнему является loginView. Почему новый TopViewController не отображается?
спасибо

ответ

2

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

var navigationController:UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("navController") as UINavigationController 

вы должны использовать это,

var navigationController:UINavigationController = self.view.window.rootViewController // it should just be self.window.rootViewController if this code is in the app delegate 
+0

Благодаря это помогло много. Знаете ли вы, нужно ли использовать popViewControllerAnimated() между 2 pushViewController() одного и того же viewController? (Чтобы не иметь 2 экземпляра одного и того же viewController в стеке UINavigation?) – grll

+0

@grll, да, если вам нужен только один экземпляр, тогда вам нужно вытащить старый, прежде чем вы нажмете еще один. – rdelmar

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