[英]How to dismiss multiple view controllers which have been presented not pushed?
設想:
我需要在每個彈出窗口中的按鈕點擊后一個接一個地顯示 3 個或更多彈出窗口。 我創建了一個不同的viewcontroller
和xib
文件每個彈出。 所以為了顯示每個彈出窗口,我使用了presentViewController
而不是pushViewController
。
也就是說,我已經使用了這個:
[self presentPopupViewController:searchPopUpView animationType:0];
代替
[self.navigationController pushViewController:searchPopUpView animated:YES];
為了消除彈出窗口,編寫了以下代碼:
[self dismissPopupViewControllerWithanimationType:0];
問題:
彈出窗口顯示完美,但每當彈出窗口出現時,背景就會變得越來越暗。 在關閉所有彈出窗口后,我必須最終單擊空白屏幕以刪除那些較暗的部分。 如何克服這個問題?
我認為您正在使用MJPopupViewController來顯示彈出窗口。
如果是這樣,那么試試這個。
假設有一個controllerA ,您想從中顯示一個彈出控制器popupControllerB 。
然后在您的控制器中添加通知觀察者
在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];
上面的代碼行將調用在您的控制器 A 中編寫的方法並正確關閉彈出窗口。
如果您想關閉呈現的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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.