如何解除多个未被推送的视图控制器?

时间:2017-02-08 05:12:03

标签: ios objective-c popup viewcontroller

情境:

我需要在每个弹出窗口中单击按钮时依次显示3个或更多弹出窗口。我为每个弹出窗口创建了不同的viewcontrollerxib个文件。因此,为了显示每个弹出窗口,我使用了presentViewController而不是pushViewController

也就是说,我用过这个:

[self presentPopupViewController:searchPopUpView animationType:0];

而不是

[self.navigationController pushViewController:searchPopUpView animated:YES];

对于解雇弹出窗口,编写了以下代码:

[self dismissPopupViewControllerWithanimationType:0];

问题:

弹出窗口显示完美,但每当弹出窗口显示时,背景会变暗和变暗。在所有弹出窗口被解除后,我必须最后点击空白屏幕以删除那些较暗的部分。如何克服这个问题?

2 个答案:

答案 0 :(得分:0)

我认为您正在使用 MJPopupViewController 来显示弹出窗口。

如果是这样,那就试试吧。

假设有一个 controllerA ,您希望从中显示弹出控制器 popupControllerB

然后在 controllerA 中添加通知观察者

要写入 controllerA 的代码:

// Add Notification Observer when your view initialise.
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dismissPopup) name:@"DISMISS_POPUP" object:nil];

viewWillDisappear 中删除通知观察者

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

当您从 popupControllerB

发布后通知时,系统会调用此方法
-(void)dismissPopup {
[self dismissPopupViewControllerWithanimationType:MJPopupViewAnimationFade];
}

popupControllerB 中,如果要关闭弹出窗口,请编写此代码。

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

以上代码行将调用 controllerA 中编写的方法并正确解除弹出窗口。

答案 1 :(得分:0)

如果您要关闭提交的UIViewControllers,您可以使用此代码。我使用这种方法来解雇presentedViewControllers。它将解除您presentedViewControllers上的所有rootViewController

UIViewController* presVC = self.window.rootViewController;

while (presVC) {
    UIViewController* temp = vc.presentingViewController;
     if (!temp.presentedViewController) {
         [vc dismissViewControllerAnimated:NO completion:^{}];
         break;
       }
      vc =  temp;
}