【发布时间】:2015-01-20 22:40:49
【问题描述】:
我在故事板上有两个视图控制器,我想在某些情况下(例如,按下按钮)在它们之间切换,所以我编写了以下代码:
// FirstViewController.swift
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootViewController = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
if let keyWindow = UIApplication.sharedApplication().keyWindow {
keyWindow.rootViewController = rootViewController
}
// SecondViewController.swift
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootViewController = storyboard.instantiateViewControllerWithIdentifier("FirstViewController") as FirstViewController
if let keyWindow = UIApplication.sharedApplication().keyWindow {
keyWindow.rootViewController = rootViewController
}
从第一个视图控制器切换到第二个按预期工作,但是当我尝试切换回第一个视图控制器时,它会改变一会儿,但会再次自动显示第二个视图控制器。奇怪的是,如果我将“切换”代码更改为以下
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootViewController = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as SecondViewController
self.presentViewController(rootViewController, animated: true, completion: nil)
它按预期工作。
为什么?我究竟做错了什么?我该如何解决?
提前致谢。
【问题讨论】:
-
为什么你只是改变根视图控制器而不是进行模态演示或推送?当你回到第一个控制器时,你想回到你来自的同一个实例(因为你的代码没有这样做,它正在创建一个新实例)?
-
@rdelmar 因为我认为这是以编程方式更改视图控制器的更合适的方式
-
没有理由使用此代码转到第一个控制器应该自动转到第二个控制器,除非您要在第一个控制器的 viewDidAppear 中转到第二个控制器。
-
第一次分配
UIWindow的rootViewController属性后,您不应触摸它。相反,你必须想出一些其他的方式来呈现它。就像视图控制器演示或一些容器UIViewController管理它的孩子。 -
@mstysf,为什么你认为你不应该触摸根视图控制器?我在 Apple 的文档中没有看到任何内容说你不应该这样做。事实上,在 UIWindow 类的顶部,它说:“要更改应用程序显示的内容,您可以更改窗口的根视图;” rootViewController 属性的描述中也没有说明不要更改它。
标签: ios xcode swift xcode6 uistoryboard