如果用户登录 iOS Swift,则从某个视图开始

Posted

技术标签:

【中文标题】如果用户登录 iOS Swift,则从某个视图开始【英文标题】:Starting at a certain view if user is logged in iOS Swift 【发布时间】:2017-02-23 22:17:19 【问题描述】:

我目前正在使用 Firebase 制作一个小型登录应用程序。我目前的登录页面有问题。

当我的用户已经登录时,当他们打开应用程序时,我想更改初始视图控制器,以便用户可以直接进入主页。

所以我的问题是,我必须执行哪一行代码才能做到这一点?

override func viewDidLoad() 
    super.viewDidLoad()
    if FIRAuth.auth() ? .currentUser ? .uid == nil 
        notLoggedIn()
    

func notLoggedIn() 
    let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let nextViewController = storyBoard.instantiateViewController(withIdentifier: "Startpage") as!ViewController
    self.present(nextViewController, animated: true, completion: nil)

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。如果您真的想更改初始视图控制器,您可能不想在情节提要中设置初始视图控制器,然后在您的应用程序委托的 application(_:didFinishLaunchingWithOptions:) 实现中,您将创建一个新的 Window 对象并在其上设置任何视图控制器想呈现为rootViewController。然后,您将在该窗口对象上调用makeKeyAndVisible。请注意,如果您这样做,如果您想再次显示您的登录窗口,则必须在他们注销时单独处理这种情况。在这种情况下,您只需再次执行相同的操作:使用您的新 ViewController 对象作为 rootViewController 创建一个新窗口对象并呈现它。

另一个选项是检查他们是否在您的初始视图控制器的viewDidLoad 方法中登录,如果没有,则显示您的登录屏幕。这就是我在其中一个应用程序需要一些数据的应用程序中所做的事情,通过登录帐户或手动添加它,然后它才能执行任何操作。

编辑:

这是我的viewDidLoad 等的样子(请注意,我的项目是在 Objective-C 中,所以我只是在猜测没有实际测试它的正确 Swift 语法是什么。您可能需要进行一些调整)您必须将当前调用分派到主队列,因为在viewDidLoad 中,您(可能)还没有准备好实际呈现新视图控制器的所有内容(我很久以前就这样做了,所以我没有不记得确切为什么必须调度它,但由于我们已经在呈现 current 视图控制器的过程中,所以你不会'不能同时展示另一个。也许其他人可以权衡一下,因为我真的不记得了。):

override func viewDidLoad() 
    super.viewDidLoad()
    if (!userLoggedIn) 
        showLoginScreen()
    


func showLoginScreen() 
    let loginViewController = storyboard?.instantiateViewController(withIdentifier: "Startpage") as! ViewController
    DispatchQueue.main.async 
        present(loginViewController, animated: true, completion: nil)
    

【讨论】:

那么应该在viewDidLoad中写哪几行代码呢?或者更确切地说,什么对你有用? 不客气。如果这解决了您的问题,请考虑将我的答案标记为已接受。 抱歉,新手!现在我知道了;) 此过程无法通过 Swreal View 控制器项目错误出现在这一行中。 self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())【参考方案2】:

你可以使用这行代码。

请记住,您应该添加带有标识符的情节提要参考 根据您的需要分别命名 - goToLogin - 在我的例子中。

希望对任何人都有帮助。

override func viewDidLoad() 
    super.viewDidLoad()
    Auth.auth().addStateDidChangeListener  auth, user in
       if let user = user 
         // User is signed in.
         print("user signed in")
         //Add the rest of the code here because after passig the caluses 
         //  viewdidload will call another funxtions to it can crash
         
        else 
         // User not signed in
         self.performSegue(withIdentifier: "goToLogin", sender: Any?.self)
         
       
     

【讨论】:

以上是关于如果用户登录 iOS Swift,则从某个视图开始的主要内容,如果未能解决你的问题,请参考以下文章

在 swift iOS 中管理用户登录序列

如果用户取消登录,Swift ios facebook登录会使应用程序崩溃

Swift ios 检查存在哪个视图控制器

vuejs - 如果已经登录,则从登录/注册重定向到主页,如果未登录 vue-router,则从其他页面重定向到登录

我在 ios 应用程序中实现了谷歌登录。现在,我如何验证用户是不是已登录,如果没有 - 使用 Swift 将他返回到登录页面?

带有 Swift 和 iOS 8 故事板的登录屏幕