关闭模态视图控制器,然后执行 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的主要内容,如果未能解决你的问题,请参考以下文章