2016-09-07 21 views
0

我剛開始研究ios。 我創建了一個Modalviewcontroller (VC1)並提交了另一個modalViewcontroller (VC2)。 VC2上有一個按鈕(dismiss),它將不得不關閉兩個視圖控制器。在演示或解散正在進行時試圖從視圖控制器(UIModalViewController)中解僱

我知道的方法是撥打電話: -

[self dismissViewControllerAnimated:YES completion:nil]; 
在VC2

然後調用相同的VC1

所以我創建了一個代表,它告訴我,如果被點擊VC2解僱。 所以當解僱點: -

我打電話

[self dismissViewControllerAnimated:YES completion:nil]; 

在VC2 那麼委託方法帶我到VC1 ,我再打電話

[self dismissViewControllerAnimated:YES completion:nil]; 

這種方法是完美的工作,直到我在ios9 中使用應用程序時,我轉移到ios7我開始接受警告,VC1沒有被解僱。

請讓我知道爲什麼會發生這種情況。

因此,在評論中告訴我的那部分工作。

[self.presentedViewController dismissViewControllerAnimated:YES completion:^{ 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    }]; 
+0

- close方法調用傳遞給VC 1.在調用它自身dismissModal並在完成參數,也 – Shubhank

+0

根據嗨解僱VC1你自己。presentsViewController dismissViewControllerAnimated:YES完成:^ {self dismissViewControllerAnimated:YES completion:nil]; }];應該工作 –

+0

是的,它應該。 – Shubhank

回答

0

所以,錯誤告訴你到底發生了什麼。你試圖解僱VC1,而你的VC2解僱。通過將dismissViewControllerAnimated到委託方法並不能保證VC1將之前解僱,取而代之的是,你應該在首先解僱打電話給你[self dismissViewControllerAnimated:YES completion:nil];在完成塊,所以你的代碼看起來像:

[self dismissViewControllerAnimated:YES 
         completion:^{ 
          [self dismissViewControllerAnimated:YES completion:nil]; 
         }]; 
+0

不應該是self.presentedviewcontroller在第一次解僱。 –

+0

你想看多少動畫?只能看到一個的方法是在呈現VC1的視圖控制器(您希望在解散之後可見的視圖控制器)上調用'self dismiss ...'。 – danh

0

對於斯威夫特人:

在我的情況,我可以通過改變時間一點點解決這個問題(發送方是當前的ViewController):

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: 
         { 
          sender.performSegue(withIdentifier: "showNextVC", sender: nil) 
         }) 

但是: 這是一個不那麼好的workaroun d,只是模糊了背後的真正原因,但至少它表明,那一刻確實發生了一些事情。在我的情況下,我想在發送異步請求之後立即執行segue。問題是,對於我已經顯示的每個異步請求(後來被解僱),一個對話框告訴用戶正在進行一些操作。

爲了改進解決方法併產生更好的解決方案,我確保在拒絕進度警報的回調中執行了segue。

希望這樣的背景信息可能會幫助別人找出使用委託的原因:)

相關問題