iOS: 如何关闭模态视图控制器并弹出一个已推送的视图控制器。

13
我有一个视图控制器B,它由根视图控制器A推入导航堆栈中,如果其模型处于某种状态,则该视图控制器B需要显示另一视图,因此它会以模态方式呈现另一个视图控制器C。当我关闭视图控制器C时,如果视图控制器B也在导航堆栈上,我也想将其弹出。我希望只有1次转换来完成此操作。
有任何想法吗?

你是使用xib还是storyboard来布局你的视图?听起来你最好的选择可能是在根视图控制器中实例化第三级视图,然后将它们添加为子视图。这样可以显示或隐藏这些视图。这比呈现和解除模态视图更加灵活。 - ninehundreds
我正在使用Storyboard,我倾向于使用单独的视图控制器来显示替代状态,因为苹果文档提到,如果您有替代界面要显示,那么将其作为单独的视图呈现是值得的(这在单独的横向视图讨论中提到)。我认为我需要实现的实际UI更改会更容易通过获取当前视图上未隐藏的单独视图来实现,因此我将尝试您的建议。 - Heisenberg
1个回答

20
在您所发布的情况下,视图控制器C的呈现视图控制器实际上将是导航控制器,因此您可以请求它弹出B,然后关闭自己。这段代码位于视图控制器C中:
-(IBAction)goBackToA:(id)sender {
    [(UINavigationController *)self.presentingViewController  popViewControllerAnimated:NO];
    [self dismissViewControllerAnimated:YES completion:nil];
}

如果您正在使用Storyboard,可以使用“unwind segue”直接跳转回A。


谢谢,经过一番考虑,我认为我需要的可能更容易通过使用一个视图控制器并根据模型状态更改其子视图来完成。如果我需要使用2个单独的视图控制器,我会尝试你的方法。 - Heisenberg
正是我所需要的! - Nerrolken

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