gpt4 book ai didi

ios - 正确的登录流程和 TabBar VC

转载 作者:行者123 更新时间:2023-11-30 12:23:05 25 4
gpt4 key购买 nike

我在从应用程序代理访问选项卡栏以设置主屏幕快速操作时遇到一些问题。这是我用来访问选项卡栏的代码行。它返回 false。

guard let tabBarController = self.window?.rootViewController as? UITabBarController else {return false}

当应用程序启动时,我的标签栏不是我的初始 VC。我有一个加载屏幕,在此期间我们对用户 token 进行身份验证,然后根据 token 是否经过身份验证,它会转到登录屏幕或选项卡栏 Controller (这也是应用程序的主要部分)。

设置具有登录屏幕的应用程序的最佳实践是什么?我们现在的做法很好,但如果有更好的方法我可以改变它。我们还使用 Branch 进行深度链接。

最佳答案

这是一个基于意见的问题,可能存在多个答案,每个答案可能适合某些特定场景。

方法 1:

这是我个人最喜欢的,并不意味着这是唯一正确的方法。我更喜欢根据 token 是否有效,用 LoginVC 或 TabBarVC 替换应用程序的 rootView Controller 。 SO 中有多个答案解释了如何用适当的动画替换应用程序的 rootVC。在这里粘贴相同的代码是多余的。

为什么我使用这种方法?

保持我的应用程序导航 Controller 堆栈干净,并且我不会在内存中保留任何实际需要之外的额外 VC。

方法 2:

这是很多人使用的最简单的原因,它简单易用,但我个人不喜欢它。以模态方式呈现登录 VC 或选项卡栏(它们显然都可能嵌入了 UINavigationController,并且您以模态方式呈现它们的 NavController,这显然会加载其嵌入的 View Controller )。

优点:

  1. 易于编码。
  2. 您始终可以确保应用程序的 rootVC 始终是固定的,并且它已呈现 LoginVC 或 TabBarVC。因此解析和访问 VC 变得相当简单。

缺点:

在整个应用程序生命周期中,以不必要的方式呈现的 Landing VC 仍保留在应用程序导航堆栈中。我显然不赞成这样做。

编辑:

正如OP明确提到的那样,他正在使用方法2,并且想知道如何访问选项卡栏中选定的索引中的特定VC,正在更新代码显示相同的内容。

代码不适用于复制粘贴,代码可能包含语法错误。下面提供的代码仅用于提供想法。

假设您的 LandVC 没有嵌入 UINavigationController。

if let landVC = UIApplication.shared.keyWindow?.rootViewController {
if let presentedVC = landVC.presentedViewController {
if presentedVC is LoginVC {
//this is login VC
}
else if presentedVC is UITabBarController {
let currentlySelectedVC = (presentedVC as! UITabBarController).viewControllers?[(presentedVC as! UITabBarController).selectedIndex]
//now check what type VC it is and use it accordingly
}
}
}

关于ios - 正确的登录流程和 TabBar VC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com