0

我有 3 个应用程序UIViewContoller

UIViewContollerA
UIViewContollerB
UIViewContollerC

UIViewContollerA打开UIViewContollerBpresentModalViewController UIViewContollerB打开UIViewContollerC_presentModalViewController

而且我希望有可能一键UIViewContollerC关闭所有 UIViewController。

我尝试打dismissModalViewControllerAnimated了两次电话,但它不起作用,还有其他选择吗?这是可能的?

4

5 回答 5

2

我会看看 unwind segues。它们使您可以放松到以前的任何转场。这个问题的答案对于描述如何使用它们非常有帮助:Unwind segues 是做什么用的以及如何使用它们?

也正如 Michael 所提到的,模态框并非设计为将一个放在另一个之上。我发现它们对表单很有用,但其他方面就不行了。我建议您也使用 UINavigation 控制器。这将允许您轻松导航回之前的控制器。然后,您还可以添加一个按钮,用于将 unwind segue 返回到您想要的初始视图控制器。

于 2013-05-12T14:30:32.877 回答
0

您可能需要某种链接调用集合来备份模态堆栈来执行此操作。

但是,如果您有一堆视图控制器,那么 UINavigationController 可能是一个更简单的解决方案,既可以首先呈现这些视图控制器,又可以一次性将它们关闭。

于 2013-05-12T14:07:04.050 回答
0

当然调用dismissModalViewControllerAnimated是行不通的,它的目的是在不同的视图控制器上调用。从文档:

关闭接收者呈现的视图控制器

因此,您需要在控制器之间设置委托,以便将取消控制器的请求向后传递给初始控制器。

请记住:

  1. 可能有更好的方法来做你想做的任何事情。模态控制器不打算在彼此之上呈现。
  2. 您正在使用不推荐使用的方法。使用 presentViewControlleranddismissViewController代替
于 2013-05-12T14:10:18.130 回答
0

你会传递UIViewContollerBin的引用UIViewContollerC,像这样

@property(nonatomic, assign) UIViewContollerB *refB;

并调用将其解除,并触发dismissModalViewControllerAnimatedin的UIViewContollerC解除操作UIViewContollerBviewWillDisappear

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.refB dismissModalViewControllerAnimated:YES]
}
于 2013-05-12T14:24:09.103 回答
-2

您可以尝试使用dismissModalViewControllerAnimatedwith animated:NO。在最上面的一个和animated:YES下面的控制器上。

或者,如果您只是在 rootController 上调用dismiss,它可能会起作用?

于 2013-05-12T14:00:16.517 回答