我正在构建一个应用程序,我决定在多个 Storyboard 文件中构建我的用户界面。每个 Storyboard 都是一组相似的 Action 。例如,LogInStoryboard
包含用于登录和注册用户的 View 。
我在导航到一个新的 Storyboard 并解散所有以前的 View Controller 以自行清理时遇到了一些问题。
这是我的数据流:
1) 应用启动进入登录 View 。 Root View Controller 是 LogInViewController
,它位于 LogInStoryboard
中。
2) 用户点击注册按钮调用模态 RegistrationViewController
,也存在于 LogInStoryboard
中。
3) 用户完成注册并自动登录。
此时, View Controller 堆栈是[LogInViewController, RegistrationViewController]
。注册后,用户会自动登录,所以我想导航到他们的主屏幕 HomeViewController
。但是,HomeViewController
位于另一个 Storyboard HomeStoryboard
中。
我想关闭 LogInViewController
和 RegistrationViewController
,然后我想从 HomeStoryboard
实例化 HomeViewController
和呈现它。这样我就有了一个简单的 View Controller 堆栈,并且 LogInStoryboard
View Controller 都可以被释放。
实现这种流程的最佳方式是什么?或者我是否应该担心那些旧的 View Controller ?
最佳答案
通常情况下,您的登录流程几乎充当一个完全独立的应用程序,其唯一功能是对用户进行身份验证并将用户信息写入您的数据库。在这种情况下,当您完成登录而不是执行 segue 时,您要做的是用 HomeViewController
替换整个 View 层次结构。为此,您只需调用 UIApplication.shared.keyWindow! = UIStoryboard(name: "HomeStoryboard", bundle: nil).instantiateInitialViewController()
(假设您将 HomeViewController
作为初始 View Controller )。当然这没有动画而且有点丑所以你想使用 UIView.transition(with:duration:options:animations:completion:)改为动画更改。示例:
UIView.transition(with: UIApplication.shared.keyWindow!, duration: 0.25, options: .transitionCrossDissolve,
animations: {
UIApplication.shared.keyWindow!.rootViewController = UIStoryboard(name: "HomeStoryboard", bundle: nil).instantiateInitialViewController()
})
关于ios - 在 iOS 中用新的 Storyboard 替换当前的 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493823/