我在更改应用程序中的根目录时遇到问题。
我的应用程序的设计。登录应用程序后,我想将 root vc 更改为UITabBarViewController清理堆栈。
我遇到过很多问题。
将 vc 设置为应用登录操作上的选项卡栏 -> 或在底部 vc 中:
self.performSegue(withIdentifier: "goToMainTabBar", sender: nil)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? TabBarViewController {
UIApplication.shared.keyWindow?.rootViewController = vc
}
}
Run Code Online (Sandbox Code Playgroud)该应用程序将崩溃:
Application tried to present modal view controller on itself. Presenting controller is TabBarViewController
Run Code Online (Sandbox Code Playgroud)
下一个问题是我们是否在TabBarViewController viewDidLoaded.
UIApplication.shared.keyWindow?.rootViewController = self
嵌入的选项卡栏项目UINavigationController本身没有导航控制器,因此导航 vc 未实例化?因为当我进入项目 vc child -> 我不能再回来了。如果我不改变 root vc 一切都很好。
对于 1),您不能使用 segue 呈现视图控制器,然后使用它来替换准备中的根视图控制器。您将需要从故事板实例化选项卡视图控制器,然后替换根视图控制器。
像这样的东西:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabController")
UIApplication.shared.keyWindow?.rootViewController = vc
Run Code Online (Sandbox Code Playgroud)
(假设情节提要称为“Main”,并且您为选项卡控制器提供“TabController”的情节提要 ID。
我不太清楚2的问题是什么。
然而,一般来说,我会以不同的方式处理这个问题,而不是将登录控制器作为初始视图控制器,将选项卡栏作为初始控制器,然后在应用程序第一次启动时显示登录控制器。这样您就可以完全避免更换根控制器,并且一切都更加受控。
| 归档时间: |
|
| 查看次数: |
3714 次 |
| 最近记录: |