关闭模态视图控制器,然后执行 segue

Posted

技术标签:

【中文标题】关闭模态视图控制器,然后执行 segue【英文标题】:Dismissing a modal view controller and THEN performing a segue 【发布时间】:2014-01-26 09:21:30 【问题描述】:

我正处于创建应用程序的早期阶段并遇到了问题。本质上,我使用 Parse SDK 注册/登录到后端。 loginViewController 是初始视图控制器。点击“注册”后,会以模态方式呈现 signupViewController。用户登录后,我希望包含应用程序其余部分的标签栏控制器以模态方式呈现。

到目前为止的故事板如下:

Storyboard Image

现在,当用户登录时,我在登录和注册之间执行手动切换。这完美无缺。我的问题是,为注册视图控制器做同样事情的最佳实践是什么?我应该在它和标签栏控制器之间创建另一个手动 segue,还是有什么方法可以先关闭它,然后从登录视图控制器执行 segue。

我在 Apple 的文档和其他一些网站上寻找答案,但没有任何成功。任何关于此事的帮助将不胜感激!

【问题讨论】:

为什么要为signupViewController选择模态segue?您可以进行推送转场来注册屏幕,然后再推送到下一个 tabBar 控制器。 这就是我最初所做的,但我认为将应用程序的内容堆叠在登录屏幕之上会更有意义,这样当用户注销时,所有子视图控制器都会被释放.这是一个正确的假设吗? 您可以设置 -popToRootViewControllerAnimated: 以防出现注销行为,并且所有子视图控制器也将被释放。 【参考方案1】:

您可以让 loginViewController “了解”事物的状态并处理路由。例如:

在全局范围内添加一个布尔属性,可能在 AppDelegate 中,命名为signedUp,默认为false 用户登录,注册vc打开 用户注册,成功后,将 signedUp 属性设置为 true 注册 vc 弹出,用户重新登录 vc 在 loginvc viewDidAppear 中检查 signedUp = true 是否为 标签栏控制器

另一种选择是将登录和签名视图控制器合并为一个,并根据模式显示/隐藏表单上的控件,这将简化您的流程,只需处理一个 vc。

【讨论】:

我会在某个时候使用它。谢谢你【参考方案2】:

我可以建议一个选项。您可以使用该方法实例化视图控制器

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
id controllerToPush = [storyboard instantiateViewControllerWithIdentifier:@"desiredViewController"];

(MainStoryboard_iPhone 和 desiredViewController 在界面生成器中指定)。然后推动这个控制器。例如,如果您使用的是导航控制器模式:

[self.navigationController setViewControllers:@[controllerToPush] animated:YES];

【讨论】:

以上是关于关闭模态视图控制器,然后执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

如何从 appdelegate 呈现和关闭模态视图?

XCTest 如何执行 segue 呈现模态视图并测试presentedViewController

模态 Segue 进入没有导航栏的导航控制器

iPad 模态控制器在旋转后被解散

如何正确关闭模态呈现的控制器

如何在触发退出 segue 之前执行操作?