簡體   English   中英

如何關閉已呈現但未推送的多個視圖控制器?

[英]How to dismiss multiple view controllers which have been presented not pushed?

設想:

我需要在每個彈出窗口中的按鈕點擊后一個接一個地顯示 3 個或更多彈出窗口。 我創建了一個不同的viewcontrollerxib文件每個彈出。 所以為了顯示每個彈出窗口,我使用了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 它會關閉所有的presentedViewControllersrootViewController

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM