如何展开导航堆栈上的第一个视图控制器

时间:2016-12-10 10:51:28

标签: ios swift cocoa-touch

我在查看登录屏幕时遇到问题。故事板结构如下: Storyboard Structure

该应用的用户流程如下: 用户登录LoginVC->通过模态segue->进入主标签栏屏幕;在每个标签栏项目上,我在导航控制器上添加右栏按钮以访问配置文件页面,每个标签栏项目都有独立的导航控制器,以保持导航控制器结构的线性。 - >一旦我点击个人资料页面按钮,个人资料页面将以模态方式显示 - >当单击配置文件页面上的注销按钮时,它会触发展开segue并关闭视图控制器

func logoutUser(){

        //Networking.logoutUser()
        print("It goes to login")
        self.performSegue(withIdentifier: "unwindToLogin", sender: self)
}

unwind segue是在最左边的VC.I上的LoginVC上实现的,它在配置文件屏幕上连接了unwind segue并称之为“unwindToLogin” 我只是使用performSegueWithIdentifier。但是,该方法不会被调用,视图也不会发生任何事情。

编辑1: 我想知道,因为我在tab bar vc上模拟调用个人资料页面,它无法找到unwindtologin。 如果我只是使用instantiateviewcontoller来调用login,它会清除我的视图控制器堆栈吗?

编辑2: 对不起,我忘了当我检查用户是否登录时,我使用下面的代码:

    if (FIRAuth.auth()?.currentUser != nil) {
        self.storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "TabBarViewController")
    }

实际上他们找不到unwind方法,因为根视图不是主登录视图控制器。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

使用展开segue移动到任何View控制器。

用于在单击按钮时移动到任何视图控制器。

- (IBAction)unwindToCurrentController:(UIStoryboardSegue *)unwindSegue { }

  • 将以上行添加到loginViewController.m文件(或)添加 这些视图控制器要移动到的行。
  • 实际上,您希望在单击时转到登录视图控制器 按钮。因此,请为此活动创建一个按钮或选择任何按钮。
  • 在执行此操作之前,您需要将以上代码添加到登录视图中 控制器。现在,通过拖动到退出,为您的按钮添加操作 顶部 视图控制器上的选项
  • 它显示unwindToCurrentController的展开选项。单击该选项 并连接它。

现在构建并运行您的应用。它完美地运作。

答案 1 :(得分:1)

您需要在每个要调用它的ViewController上创建展开segue。他们都可以在登录屏幕中使用相同的@IBAction目的地,并且可以将它们全部称为"unwindToLogin"

我在MainTabBarController上看到了unwind segue。在UserProfileController中,您需要控制 -drag从视图控制器图标到退出图标,然后选择您的{{ 1}}在弹出窗口中。然后在文档大纲@IBAction中找到unwind segue,并将其标识符UserProfileController

回复编辑2:

由于您的初始viewController是以编程方式放置的,因此无法展开"unwindToLogin"。在这种情况下, 将着陆LoginViewController放入@IBAction,并将MainTabBarController设置为登录屏幕。

答案 2 :(得分:-1)

你可以试试这个为我工作。

[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];

我用它来关闭模态视图,以便我可以返回原始视图。