情境:
我需要在每个弹出窗口中单击按钮时依次显示3个或更多弹出窗口。我为每个弹出窗口创建了不同的viewcontroller
和xib
个文件。因此,为了显示每个弹出窗口,我使用了presentViewController
而不是pushViewController
。
也就是说,我用过这个:
[self presentPopupViewController:searchPopUpView animationType:0];
而不是
[self.navigationController pushViewController:searchPopUpView animated:YES];
对于解雇弹出窗口,编写了以下代码:
[self dismissPopupViewControllerWithanimationType:0];
问题:
弹出窗口显示完美,但每当弹出窗口显示时,背景会变暗和变暗。在所有弹出窗口被解除后,我必须最后点击空白屏幕以删除那些较暗的部分。如何克服这个问题?
答案 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;
}