Ios 如何排除已显示但未按下的多个视图控制器?

Ios 如何排除已显示但未按下的多个视图控制器?,ios,objective-c,popup,viewcontroller,Ios,Objective C,Popup,Viewcontroller,场景: 我需要显示3个或更多的弹出窗口一个接一个的按钮点击在每个弹出窗口。我为每个弹出窗口创建了不同的viewcontroller和xib文件。因此,为了显示每个弹出窗口,我使用了presentViewController而不是pushViewController UIViewController* presVC = self.window.rootViewController; while (presVC) { UIViewController* temp = vc.presenti

场景:

我需要显示3个或更多的弹出窗口一个接一个的按钮点击在每个弹出窗口。我为每个弹出窗口创建了不同的
viewcontroller
xib
文件。因此,为了显示每个弹出窗口,我使用了
presentViewController
而不是
pushViewController

UIViewController* presVC = self.window.rootViewController;

while (presVC) {
    UIViewController* temp = vc.presentingViewController;
     if (!temp.presentedViewController) {
         [vc dismissViewControllerAnimated:NO completion:^{}];
         break;
       }
      vc =  temp;
}
也就是说,我用了这个:

[self-presentPopupViewController:searchPopUpView动画类型:0]

而不是

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

为了关闭弹出窗口,编写了以下代码:

[self dismissPopupViewControllerWithanimationType:0];
问题:


弹出窗口显示得非常完美,但每当弹出窗口出现时,背景会越来越暗。在所有弹出窗口都被删除后,我不得不点击空白屏幕来删除那些较暗的部分。如何克服这个问题?

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

如果是这样,那么试试这个

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

然后在您的控制器中添加通知观察者

要在控制器中写入的代码

// Add Notification Observer when your view initialise.
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dismissPopup) name:@"DISMISS_POPUP" object:nil];
视图中将消失删除通知

- (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];

上述代码行将调用在控制器中编写的方法,并正确关闭弹出窗口。

如果要关闭显示的
UIViewController
,可以使用此代码。我使用这种方法来消除
演示的IEWController
。它将关闭
rootViewController
上所有的
演示视图控制器

UIViewController* presVC = self.window.rootViewController;

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

可以添加UI图像。[自我呈现视图控制器:yourobj动画:是完成:无];并解除[自我解除查看控制器激活:是完成:无];朋友,我想这对你有帮助。检查你的
[self.childViewControllers count]
然后逐个运行循环抽头viewcontroller并将其从parentViewController中删除,这个技巧会对你有帮助。@Lalitkumar它不是这样工作的。如果我添加了这些代码,那么它将显示为完整的vie控制器,而不是弹出窗口