【问题标题】:UINavigationController topViewController not showing upUINavigationController topViewController 没有出现
【发布时间】:2015-01-28 22:54:33
【问题描述】:

我正在使用下面的代码来尝试更改 UINavigationController 中显示的 viewController:

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)")  

这里是故事板:

第一个问题:为什么当我在这个例子中删除popViewControllerAnimated函数调用时,即使我推了顶视图仍然是LoginView主视图? (不应该是最后一个推送的视图控制器吗?)
第二个问题:当我保持 popViewControllerAnimated 函数调用时,我得到了正确的顶视图(我的 topView 现在是 HomeView 正如预期的那样)但是屏幕上显示的 ViewController 仍然是 loginView。为什么新的 TopViewController 没有出现呢?
谢谢

【问题讨论】:

    标签: ios xcode swift uinavigationcontroller storyboard


    【解决方案1】:

    问题在于您实例化了一个新的导航控制器,而不是访问在您的应用启动时自动实例化的导航控制器。而不是这一行,

    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
    

    【讨论】:

    • 感谢它帮助很大。你知道我是否需要在同一个 viewController 的 2 个 pushViewController() 之间使用 popViewControllerAnimated() 吗? (为了在 UINavigation 堆栈中没有相同 viewController 的 2 个实例?)
    • @grll,是的,如果您只想要一个实例,那么您需要在推送另一个实例之前将旧实例弹出。
    猜你喜欢
    • 2015-01-19
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多