解除模态视图控制器

时间:2010-07-11 01:33:53

标签: iphone objective-c cocoa-touch uiview uiviewcontroller

View Controller A以模态方式呈现View Controller B,它有一个按钮以模态方式呈现View Controller C.

这是我的流程:

A presents B which presents C

当B呈现C时,我希望B被解雇,所以我唯一的视图控制器是A和C.我不知道在哪里打电话:

[self dismissModalViewControllerAnimated:NO];

为了解雇B.

我创建了一个委托模式,在B呈现C之后,A将解雇B但是没有任何东西被解雇。

如果B是C的代表,那么C就会解散自己。

4 个答案:

答案 0 :(得分:1)

我认为您可以使用NSNotificationCenter。 您可以在B处创建一个NSNotificationCenter,调用一个方法来解雇自己,然后从C发布通知,在B处调用NSNotificationCenter。

我不确定,但它可能有用。

在B中添加:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissFunction:) name:@"DismissFunction" object:nil];

和这样的方法:

- (void)dismissFunction:(NSNotification*)notification
{
      [self.navigationController dismissModalViewControllerAnimated:YES];
}

在C中添加:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DismissFunction" object:nil];

答案 1 :(得分:0)

您应该使用UINavigationController来执行此操作。

*创建一个导航控制器,控制器B作为根视图控制器。 * A将导航控制器作为模态与presentModalViewControler:animated:这将与呈现B具有相同的效果 *当B需要呈现C时,通过调用[self.navigationController pushViewController:C animated:YES]将其推送到导航视图comptroller的堆栈中 *如果C需要被解雇以复制B你可以通过调用[self.navigationController popViewControllerAnimated:YES]来做 *如果C需要解雇并辱骂A你可以通过调用[self.navigationController.parentViewController dismissModalAnimated:YES]来解除模态

通过将A嵌入导航控制器的根视图控制器并将B推送到导航控制器而不是将其作为模态显示

,您可以更进一步而不使用模态

答案 2 :(得分:0)

我认为你不能这样做。再次阅读dimissing the modal view controller

的文档

如果连续呈现多个模态视图控制器,从而构建一组模态视图控制器,则在堆栈下方的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图上方的所有视图控制器。发生这种情况时,只有最顶层的视图以动画方式被删除;任何中间视图控制器都可以从堆栈中删除。最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同。

这意味着如果你解雇B,你也会解雇C

答案 3 :(得分:0)

只需从A

执行此操作
[self.navigationController dismissModalViewControllerAnimated:YES];