如何从自己的选项卡之一中关闭选项卡栏控制器?

How to dismiss a Tab Bar Controller from inside one of its own tabs?

提问人:incelemeTRe 提问时间:11/12/2023 最后编辑:HangarRashincelemeTRe 更新时间:11/13/2023 访问量:26

问:

我正在构建一个新应用程序。我的身份验证流程显示一个选项卡栏控制器,末尾有 5 个选项卡。

在我的登录屏幕中,成功登录后会显示选项卡栏控制器:

let vc = MainTabBarVC()
vc.modalPresentationStyle = .fullScreen
self?.present(vc, animated: true)

在选项卡栏控制器上,在最后一个选项卡(我的设置 VC)内,有一个注销按钮。如何使用此注销按钮的操作完全关闭选项卡栏并返回登录屏幕?我正在尝试从其选项卡之一内关闭整个选项卡栏控制器。

iOS Swift 导航 UITabbarController 关闭

评论

3赞 Paulw11 11/12/2023
不应以模式显示选项卡栏控制器,而应将其设置为窗口/场景的根视图控制器。然后,注销按钮会将根视图控制器更改回“注销”视图控制器
1赞 HangarRash 11/12/2023
我采取的方法是使选项卡栏控制器成为应用程序的根视图控制器。如果用户需要登录,则从选项卡栏控制器显示登录屏幕。成功登录后,您将关闭登录屏幕。当用户选择注销时,您只需再次显示登录屏幕(通过选项卡栏控制器)。无需更改应用的根视图控制器。

答:

0赞 incelemeTRe 11/13/2023 #1

解决:

感谢 @Paul 和 @HangarRash 的评论。正如@Paul在评论中告诉我的那样,我更改了根视图控制器,它运行良好。我的代码:

        let vc = LoginVC(authManager: authManager)
        
        if let delegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate {
            guard let window = delegate.window else { return }
            UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve, animations: {
                window.rootViewController = vc
                window.makeKeyAndVisible()
            }, completion: { completed in
                // Something maybe later
            })
        }