新手在这里...我的根视图控制器具有以下代码:
func showVC1() {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc1 = storyBoard.instantiateViewController(withIdentifier: "first")
self.present(vc1, animated:true, completion:nil)
}
func showVC2() {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc2 = storyBoard.instantiateViewController(withIdentifier: "second")
self.present(vc2, animated:true, completion:nil)
}
我可以按任意顺序调用这些函数,第一个工作正常,但第二个会给我一个错误,例如"尝试在视图中显示不在窗口层次结构中!"
我想我想将所有代码保存在包含这些函数的root vc中。我怎样才能做到这一点?
我还担心每次调用这些函数时,我都会创建新的vc实例,这将使用更多的内存。有没有办法在这些函数之外引用这些vc?这会解决层次结构问题吗?
答案 0 :(得分:-1)
而不是呈现新的视图控制器,尝试将其推入导航堆栈,如
self.navigationController.pushViewController(controller, animated: false)
因为如果您在控制器上出现任何内容,它将无法继续导航。这将导致崩溃
答案 1 :(得分:-2)
是的,第二个给出错误,因为您试图从根视图控制器同时呈现两个视图控制器。
您可以创建对这些视图控制器的延迟引用
lazy var firstViewController : FirstViewController = {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let vc1 = storyBoard.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
return vc1
}()
@IBAction func buttonPressed(_ sender: Any) {
self.present(firstViewController, animated:true, completion:nil)
}