如何解除另一个ViewController中的viewcontroller?

时间:2015-11-10 12:31:34

标签: ios objective-c uiviewcontroller presentmodalviewcontroller

假设我的视图控制器名为 A B C D E 我以presentModel的方式依次打开这些ViewConrollers。当我在ViewController E 时,我想以presentModel方式打开另一个ViewController F 。在 F ViewController我有一个后退按钮。当我点击它时应该忽略 F 并显示 A ViewController。但是现在当它解雇时显示 E 。当我点击 F 的后退按钮

时,如何解除除 A 之外的所有其他视图控制器

请帮帮我。感谢

已更新

-(IBAction)dismisthis:(id)sender{


UIViewController *dismissingViewController = self.presentingViewController;
while (dismissingViewController.presentingViewController != nil && [dismissingViewController isKindOfClass:[FrontViewController class]]) {
    dismissingViewController = self.presentingViewController;
}




[dismissingViewController dismissViewControllerAnimated:NO completion:NULL];

5 个答案:

答案 0 :(得分:3)

如果您关闭呈现另一个视图控制器的视图控制器,则会关闭整个层次结构。有多少级别并不重要。所以你要做的就是找到你的视图控制器A并告诉它解雇它的视图控制器。

如果A始终是堆的底部,您可以使用一个简单的循环来找到它:

UIViewController *dismissingViewController = self.presentingViewController;
while (dismissingViewController.presentingViewController != nil) {
    dismissingViewController = self.presentingViewController;
}

[dismissingViewController dismissViewControllerAnimated:YES
                                             completion:NULL];

答案 1 :(得分:1)

此刻我可以想到三个解决方案

  1. 您应该在Appdelegate中跟踪stackObject(这是一个数组)中的所有viewControllers。当你想要它访问时,获取这些数组并关闭所有视图控制器对象。

  2. 您可以观察每个视图控制器以查看通知的NSNotification。当您在“F”中需要它时,只需发布​​通知,此通知将解除eviewcontrollers

  3. 转到NavigationController,以便您可以推送到rootviewcontroller

答案 2 :(得分:1)

如果使用来自F和A的Notification发送NSNotificationCenter,将听取它。一旦A收到通知,它将调用dismissViewController,我认为这将解雇所有通知。

答案 3 :(得分:0)

试试这个:

UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController;
[rootVC dismissViewControllerAnimated:YES completion:nil];

// One-liner
// [[UIApplication sharedApplication].delegate.window.rootViewController dismissViewControllerAnimated:YES completion:nil];

答案 4 :(得分:0)

将A设为rootViewController,并在“F”的后退按钮上使用以下代码:

[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissViewControllerAnimated:true completion:nil];