如何在故事板上返回到第一个视图控制器?

8
这是场景:
我Storyboard中的第一个场景是一个登录视图,它是UIViewController。当用户登录后,它会显示首页视图,该视图嵌入在导航控制器中。我正在添加一个注销功能,应该将我带回Storyboard中的第一个场景,即登录视图。我该怎么做?
这是Storyboard的图像,显示了登录视图 -> 导航控制器 -> 首页视图。
这是目前我的实现方式。在注销操作中,我清除会话并弹出到根视图控制器。它不起作用,因为我仍然停留在首页视图上,因为它是导航控制器的根视图控制器。但是,如果重新启动应用程序,则用户已注销,并且我只能看到登录视图。
代码:
    [self.navigationController popToRootViewControllerAnimated:NO];

    // Set at beginning of storyboard
    UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    app.loginViewController = [mystoryboard instantiateViewControllerWithIdentifier:@"loginViewController"];

2
使用“取消回退”segue。 - Sergey Kalinichenko
你应该将它添加为一个答案,我会接受它。同时,这花费了我一些时间,因为这些操作来自UIActionSheet,而SO的示例都使用按钮。如果你找到了一个好的以编程方式完成所有操作的方法,请告诉我。 - oky_sabeni
我的评论并不是完整的答案,只是一个提示。你下面有一个更好的答案,使用了同样的思路。 - Sergey Kalinichenko
它让我接近了,所以谢谢! - oky_sabeni
4个回答

7
请使用unwind segue实现此功能。
在您的LoginViewController中,声明一个具有以下签名的方法: - (IBAction)unwindToLoginViewController:(UIStoryboardSegue*)segue 进入您的HomeViewController并从注销按钮控制拖动到视图控制器窗口顶部的Exit按钮(参见下面的屏幕截图),然后选择unwindToLoginViewController segue。就这样!

1
我已经让它工作了,但我还在努力弄清楚如何将segue操作与UIActionSheet按钮匹配(例如,没有注销按钮或该按钮是以编程方式生成的)。 - oky_sabeni
1
将控制器(其中“Exit Segue”图标的三个图标中的第一个)连接到“Exit”图标。给 unwind segue 命名,当您想要触发它时,只需使用 performSegueWithIdentifier:sender: 方法即可。 - Rog

2

你可以使用navigationController.viewControllers进行弹出操作。获取navigationController中的所有视图控制器,识别它们并进行弹出。如果您是从LoginView到HomeView进行推送的,则可以执行此操作。

if([self.navigationController.viewControllers[0] isKindOfClass:[LoginViewController class]]) 
    {
      [self.navigationController popToViewController:self.navigationController.viewControllers[0] animated:YES];
    }

希望这能对您有所帮助...

不,登录视图没有嵌入导航控制器中。没有剩余的可弹出的内容。 - oky_sabeni

1
尝试这个答案。首先创建一个导航控制器,将其设置为“初始视图控制器”。然后将登录视图控制器连接为根视图控制器,并使用Facebook按钮操作连接主页控制器。
导航控制器 -> 登录控制器 -> 主页控制器
你的故事板应该如下所示。

enter image description here

在从HomeViewController注销时,只需添加此方法:

  -(IBAction)logOut_Action:(id)sender
  {
    [self.navigationController popViewControllerAnimated:YES];
  }

它正常工作。请按照这样的方法实施并告诉我是否遇到任何问题。 :)


嘿,我找到解决方法了,但不是你的方式。我不想在登录视图中显示导航控制器栏。不过还是谢谢你的答案! - oky_sabeni
好的,您可以隐藏导航栏。在Storyboard中将“Top Bar”设置为无。 - Soumya Ranjan

1

试试这个:

[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接