swift 3登录后如何返回主页或以前的视图控制器

Posted

技术标签:

【中文标题】swift 3登录后如何返回主页或以前的视图控制器【英文标题】:How to go back to home page or previous viewcontroller after login in swift 3 【发布时间】:2017-04-22 12:50:38 【问题描述】:

我正在开发一个应用程序,其导航控制器连接到选项卡控制器,其他一些视图控制器连接到选项卡控制器,如图所示:

现在我只想在用户单击第二个选项卡但未登录时向他们显示登录页面。所以在第二个选项卡控制器中,我有这个:

if let token = cookies["token"] 
        //do something
 else 
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "loginView")
    self.tabBarController?.setViewControllers([vc!], animated: true)

在我的 LoginViewController 中,我想在成功登录后返回上一页。我对此主题进行了一些研究。这是我尝试过的。我试过这个:

let vc = self.storyboard?.instantiateViewController(withIdentifier: "minePage") as! MineViewController
self.tabBarController?.setViewControllers([vc], animated: true)

它会打开页面,但不再显示标签栏而不是导航栏。我也试过这个:

self.navigationController?.pushViewController(vc, animated: true)

它也将用户带回“minePage”,但只显示导航栏而不是标签栏。我还尝试在情节提要中添加一个展开转场,并在第一个视图控制器中添加一个函数:

@IBAction func prepareForUnwindWithSegue(segue: UIStoryboardSegue)

并尝试了这个:

self.dismiss(animated: true, completion: nil)

登录后什么也没有发生。我的问题是

    故事板设置是添加登录视图的好习惯吗?一些***答案建议将登录视图放在一切之前。但只有部分应用程序需要登录。所以不适合。 如何返回上一页或默认主页(在我的例子中是第一个标签栏控制器视图)?应用中需要这两种情况。

谢谢。

【问题讨论】:

没有人遇到过同样的情况吗? 【参考方案1】:

嗨,你能不能把“完整”登录的视图控制器放在你的登录页面后面。因此,从您的登录视图控制器(不是登录按钮)到右侧的新视图控制器(上图中没有的新视图控制器)设置一个 segue,然后如果登录尝试有效,则有条件地调用它?

这样你就可以清楚区分登录前和登录后看到的内容了?

然后您只需将逻辑添加到该选项卡中的第一个 viewController 以检查用户是否已登录,如果已登录,则通过类似的 segue 绕过一直到新登录的视图控制器(来自第一个 VC到有条件地被解雇的新的)。

【讨论】:

以上是关于swift 3登录后如何返回主页或以前的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

performSegueWithIdentifier 被跳过 *SWIFT

登录后如何在 swift 4 中使用主视图控制器设置侧边菜单

Swift 3返回上一个视图控制器

如何从导航控制器切换到选项卡控制器并使其成为根视图控制器

presentViewController 不显示标签栏或导航栏

Swift 3 - 将数据传递回以前的视图控制器