成功登录后关闭 LoginVC
Posted
技术标签:
【中文标题】成功登录后关闭 LoginVC【英文标题】:Dismissing LoginVC after successful login 【发布时间】:2021-03-19 02:13:01 【问题描述】:在我的应用程序中,如果用户未登录,他们将被定向到注册/登录 viewController。此逻辑发生在 SceneDelegate
,我坚持尝试在用户注册后显示初始视图控制器或登录。我尝试关闭视图控制器并显示根视图控制器,但都没有奏效。以下是SceneDelegate
检查登录状态后的逻辑:
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.rootViewController = OnboardingVC()
登录/创建帐户后,这是我在成功登录或创建帐户后尝试过的示例,但不起作用:
if let vc = self.onboardingVC?.storyboard?.instantiateViewController(identifier: "JournalVC") as? JournalVC
self.onboardingVC?.present(vc, animated: true, completion: nil)
和
self.onboardingVC?.dismiss(animated: true, completion: nil)
我浏览了一些示例,但它们都涉及AppDelegate
,我没有使用,谁能指出我正确的方向?
【问题讨论】:
【参考方案1】:假设,只是为了举例,您在应用程序委托中实现此功能的方式是:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
if let rvc = self.window?.rootViewController
let ud = UserDefaults.standard
if ud.string(forKey: "username") != nil
print("app delegate: user has logged in")
let vc = rvc.storyboard!.instantiateViewController(withIdentifier: "userHasLoggedIn")
self.window!.rootViewController = vc
return true
那么在场景委托中完全平行的方式是:
class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDelegate
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
if let rvc = self.window?.rootViewController
let ud = UserDefaults.standard
if ud.string(forKey: "username") != nil
print("scene delegate: user has logged in")
let vc = rvc.storyboard!.instantiateViewController(withIdentifier: "userHasLoggedIn")
self.window!.rootViewController = vc
【讨论】:
(取自我的github.com/mattneub/RegistrationExample) 是的,我理解这个逻辑,但我的问题是用户注册后要立即做什么。如何摆脱登录 VC/从该 loginVC 呈现 rootVC【参考方案2】:您必须在场景委托中编写一个函数,以在成功登录后显示视图控制器
在您的场景委托中编写一个函数
func launchJourneyViewController()
let journeyViewController = JourneyViewController()
window?.rootViewController = journeyViewController
window?.makeKeyAndVisible()
登录成功后,在你的登录视图控制器中,你可以编写一个函数
func onLoginSuccess()
let scene = UIApplication.shared.connectedScenes.first
if let sceneDelegate : SceneDelegate = (scene?.delegate as? SceneDelegate)
sceneDelegate.launchJourneyViewController()
这考虑到您的应用程序中只有一个场景
【讨论】:
以上是关于成功登录后关闭 LoginVC的主要内容,如果未能解决你的问题,请参考以下文章
更改窗口 rootViewController 后出现 UITabBarController
模态 UINavigationController 隐藏但不关闭
Spring Security仅在成功登录后显示主页[关闭]