Ios 正确的登录流程和TabBar VC
我在从应用程序代理访问选项卡栏以设置主屏幕快速操作时遇到一些问题。下面是我用来访问选项卡栏的代码行。它返回错误Ios 正确的登录流程和TabBar VC,ios,swift,swift3,Ios,Swift,Swift3,我在从应用程序代理访问选项卡栏以设置主屏幕快速操作时遇到一些问题。下面是我用来访问选项卡栏的代码行。它返回错误 guard let tabBarController = self.window?.rootViewController as? UITabBarController else {return false} 当应用程序启动时,我的选项卡栏不是我的初始VC。我有一个加载屏幕,在此期间我们对用户令牌进行身份验证,然后根据令牌是否经过身份验证,它会转到登录屏幕或选项卡栏控制器(这也是应用程
guard let tabBarController = self.window?.rootViewController as? UITabBarController else {return false}
当应用程序启动时,我的选项卡栏不是我的初始VC。我有一个加载屏幕,在此期间我们对用户令牌进行身份验证,然后根据令牌是否经过身份验证,它会转到登录屏幕或选项卡栏控制器(这也是应用程序的主要部分)
设置带有登录屏幕的应用程序的最佳实践是什么?我们现在的做法很好,但如果有更好的办法,我可以改变。我们还使用Branch进行深度链接 这是一个基于意见的问题,可能存在多个答案,每个答案都可能适用于某些特定场景 方法1: 这是我个人的最爱,但并不意味着这是唯一正确的方法。我更喜欢根据令牌是否有效,将应用程序的rootView控制器替换为LoginVC或TabBarVC。在这篇文章中,有很多答案解释了如何用合适的动画替换应用程序的rootVC。粘贴相同的代码在这里是多余的 我为什么使用这种方法 使我的应用程序导航控制器堆栈保持干净,并且我不会在内存中保留任何超出实际需要的额外VC 方法2: 这是许多人使用的最简单的原因,它使用起来很简单,但我个人不喜欢它。以模态方式显示登录VC或选项卡栏(它们都可能嵌入UINavigationController,并且您以模态方式显示其NavController,这显然会加载其嵌入的视图控制器) 优点:
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
}
}
}
因为看起来我们使用的是第二种方法,而且使用这种方法并不是不好的做法,所以在执行主屏幕快速操作时,我们如何从应用程序委托访问选项卡栏控制器来设置selectedIndex?@nevin jethmalani:请查看上面发布的代码。以上代码将帮助您从应用程序中的任何位置获取所选选项卡索引处的选项卡栏和VC。我从来没有说过第二种方法不是一种坏的做法。在我看来,第二种方法仍然不是一个好主意,因为它不必要地将VC留在内存中。我不喜欢它:)内文JyMalaN:如果有帮助,请考虑接受答案。