关闭所有UIViewController

时间:2013-05-12 13:59:05

标签: iphone ios objective-c

我有3个UIViewContoller

的应用
UIViewContollerA
UIViewContollerB
UIViewContollerC

UIViewContollerA打开UIViewContollerB presentModalViewController UIViewContollerB使用UIViewContollerC

打开presentModalViewController

我希望只需点击UIViewContollerC中的按钮即可关闭所有的UIViewController。

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

5 个答案:

答案 0 :(得分:2)

我会看一下放松赛段。它们允许您放松任何以前的segue。这个问题的答案非常有助于描述如何使用它们:What are Unwind segues for and how do you use them?

同样如迈克尔所述,模态不是设计成一个放在另一个之上。我发现它们非常适合表格,但不是很多。我建议你也使用UINavigation控制器。这将允许您轻松导航回以前的控制器。然后,您还可以将一个用于展开segue的按钮添加回您想要的初始视图控制器。

答案 1 :(得分:0)

你可能需要某种类型的链接调用来备份模态堆栈来执行此操作。

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

答案 2 :(得分:0)

当然调用dismissModalViewControllerAnimated不起作用,它打算在不同的视图控制器上调用。来自文档:

  
    

取消接收器

提供的视图控制器   

因此,您需要在控制器之间设置委派,以便传递请求将控制器向后移至初始控制器。

请记住:

  1. 可能有更好的方法来做你正在尝试做的事情。模态控制器并不打算相互叠加。
  2. 您正在使用弃用的方法。使用 presentViewControllerdismissViewController代替

答案 3 :(得分:0)

你会在UIViewContollerB中传递UIViewContollerC的引用,就像这样

@property(nonatomic, assign) UIViewContollerB *refB;

并致电dismissModalViewControllerAnimated中的UIViewContollerC将其解雇,并在UIViewContollerB

中解除viewWillDisappear的解雇行动
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.refB dismissModalViewControllerAnimated:YES]
}

答案 4 :(得分:-2)

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

或许它可以工作,如果你只是在rootController上调用dismiss?