2013-12-23 66 views
0

我有主視圖控制器(從UINavigationController的衍生),其seques當用戶退出甲開卷塞克返回到主控制器,其然後seques以查看控制器B.如何/何時在彈出另一個視圖控制器後立即推送視圖控制器?

我面臨的問題,以查看控制器A. 是,如果我在主視圖控制器以下代碼:

- (IBAction)unwindToMasterViewController:(UIStoryboardSegue *)segue 
{ 
    [self performSegueWithIdentifier:@"SequeToViewControllerB" sender:self]; 
} 

然後我得到錯誤:「可能會導致損壞的導航欄不平衡呼叫開始爲視圖控制器B /端部外觀轉變嵌套推動畫」 。

但是,如果我從unwind seque中刪除對performSeque的調用,並從主視圖控制器上的按鈕手動觸發它,那麼一切正常。因此,這表明問題與時間有關,事實上,我在過去看到類似的問題,這些問題與動畫定時有關(在先前的推送調用完成之前嘗試調用pushViewControllerAnimated:YES等)。

因此,考慮到我試圖在下面的代碼中放置seque,期待didPopItem不會被調用,直到視圖控制器A完成彈出堆棧。

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item 
{ 
    [self performSegueWithIdentifier:@"HomeSeque" sender:self]; 
} 

但是沒有解決它。

所以我怎麼能告訴何時視圖控制器A已經完成彈出堆棧,所以我知道它的安全seque查看控制器B? (假設確實是這個問題,但似乎是由於我的按鈕實驗)。

另外有沒有辦法讓我的操作系統從VC A過渡到VC B對我來說?

回答

1

您可以使用的方法在這裏討論:popping and pushing view controllers in same action

換句話說,而不是使用罐裝開卷SEGUE,它將調用popViewControllerAnimated:YES,你彈出通過調用popViewControllerAnimated:NO,現在你可以走直線上推SEGUE 。

更清晰的方法是使用新的視圖控制器堆棧調用setViewControllers:animated:

相關問題