Ios 使用侧菜单更改根视图控制器
我正在尝试用另一个ViewController更改RootViewController。但我想不出来。我面临的一些问题是 通过上述代码更改rootViewController后,新的viewController将消失。 在控制台日志中:不建议在分离的视图控制器上显示视图控制器。 请帮帮我 我的代码是:Ios 使用侧菜单更改根视图控制器,ios,swift,side-menu,Ios,Swift,Side Menu,我正在尝试用另一个ViewController更改RootViewController。但我想不出来。我面临的一些问题是 通过上述代码更改rootViewController后,新的viewController将消失。 在控制台日志中:不建议在分离的视图控制器上显示视图控制器。 请帮帮我 我的代码是: func changeRootView(){ guard let delegate = UIApplication.shared.delegate else { return } guar
func changeRootView(){
guard let delegate = UIApplication.shared.delegate else {
return
}
guard let window = (delegate as! AppDelegate).window else {
return
}
UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve, animations: {
let lgv = DriverMainViewController()
window.rootViewController = UINavigationViewController(rootViewController: lgv)
}, completion: { completed in
SideMenuManager.menuLeftNavigationController!.dismiss(animated: true, completion: nil)
print ("changed")
})
}
但是这个蓝色背景的viewController在1秒内消失了。
这个屏幕截图是在新的根视图控制器消失后出现的。我认为这里发生的是,当您设置窗口的
rootViewController
时,旧的rootViewController
不再被引用,它会被ARC删除。您可以尝试捕获外出视图控制器,使其在动画期间保持不变。试试这个:
func changeRootView(){
guard let delegate = UIApplication.shared.delegate else { return }
guard let window = (delegate as! AppDelegate).window else { return }
// capture a reference to the old root controller so it doesn't
// go away until the animation completes
let oldRootController = window.rootViewController
UIView.transition(with: window,
duration: 0.3,
options: .transitionCrossDissolve,
animations: {
let lgv = DriverMainViewController()
window.rootViewController = UINavigationViewController(rootViewController: lgv)
},
completion: { completed in
// OK, we're done with the old root controller now
oldRootController = nil
SideMenuManager.menuLeftNavigationController!.dismiss(animated: true, completion: nil)
print ("changed")
}
)
}
这段代码所做的是向窗口的现有根视图控制器添加一个引用,然后在完成块中捕获它以控制它存在的时间