1

我有一個導航控制器堆棧,其中包含不同的可能控制器。iOS:關閉視圖控制器並推送新視圖而不顯示導航堆棧中的當前視圖

我希望根據我推入導航控制器的下一個視圖,根據需要呈現視圖控制器。 (你能想到的,作爲用戶登錄驗證移動到下一個屏幕前screen..which驗證用戶。)

我能夠與

UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(contactPicker, animated: true, completion: nil) 

成功地做到這一點,並關閉它,當我需要解僱與

UIApplication.sharedApplication().keyWindow?.rootViewController?.dismissViewControllerAnimated(false, completion: { 
     self.navigationController.pushViewController(myNewVC, animated: true) 
    }) 

我能夠從模態呈現的觀點做然而過渡到下一個視圖我(myNewvC)新推的不正是我希望它是。當視圖解散發生時,我可以看到我的呼叫者屏幕一秒鐘,然後移動到下一個視圖。我不想看到那個屏幕。可能嗎?

(另外我不想在導航堆棧中添加驗證屏幕,因爲該屏幕的目的不是導航堆棧的一部分)。

+0

您可以隱藏通過設置其Alpha爲0 –

回答

0

蘋果公司完全在這裏添加完成塊,以防止未捕獲的異常,因爲你想要做的可能會導致一個,因爲你不能同時做兩個動畫,也許一些建議的解決方案:

嘗試呈現新的控制器,然後在完成時隱藏前一個控制器(這種方式當用戶解散新的控制器時,他不會看到前一個控制器),例如 假設你在VC1一個現在要取消它,並顯示VC2,你可以在Objective-C

[self presentViewController:VC2 animated:YES completion:^{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]; 

使用下面的代碼在迅速

self.presentViewController(VC2, animated: true) {() -> Void in 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

或者,你可以忽略它如果用戶不會放棄新控制器,那麼他將永遠不會看到舊控制器,但我不認爲這是內存有效的,因爲控制器會卡在內存中。

+0

可以請你解釋一下第一個建議您的基本看法?無法理解它。 – Dovakin

+0

我會編輯我的答案來解釋它更多 –

+0

那麼我的問題是與導航控制器的上下文。我正在介紹導航控制器的模態視圖。所以基本dismissViewController目前完成將無法正常工作。 – Dovakin

0

我沒有自己嘗試過,但是如果你使用UINavigationViewController,並且你不想返回那個ViewController,那麼你可以簡單地從堆棧中移除,然後再進入下一個ViewController。 在這裏你可以看到你是如何改變UINavigationViewController的視圖控制器陣列: Removing viewcontrollers from navigation stack

+0

我的問題是在我解僱presentViewController的時候,導航堆棧中的當前控制器在我轉移到下一個之前顯示。我知道我可以設置控制器陣列在你的鏈接中提到..但它不能解決我的問題。 – Dovakin

相關問題