簡體   English   中英

如何/何時在彈出另一個視圖控制器后立即推送視圖控制器?

[英]How/when to push a view controller immediately after popping another?

我有一個主視圖控制器(從UINavigationController派生),該視圖控制器可以依序顯示到視圖控制器A。當用戶退出A時,展開固定順序將返回到主控制器,然后該主控制器可以依序顯示到視圖控制器B。

我面臨的問題是,如果我在主視圖控制器中有以下代碼:

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

然后,我得到一個錯誤:“嵌套的推送動畫可能會導致導航欄損壞,從而導致View Controller B的開始/結束外觀過渡的調用不均衡”。

但是,如果我從展開序列中刪除對performSeque的調用,並通過主視圖控制器上的按鈕手動觸發它,則一切正常。 因此,這表明問題與時間有關,實際上,我過去也曾遇到過類似的問題,這些問題與動畫時間有關(嘗試在之前的push調用完全完成之前調用pushViewControllerAnimated:YES等)。

因此請牢記,我嘗試將序列號放在下面的代碼中,期望在視圖控制器A完成從堆棧中彈出之前,didPopItem不會被調用。

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

但是那並沒有解決。

那么,如何知道視圖控制器A何時完成從堆棧中彈出,以便知道可以安全地鎖定視圖控制器B? (假設確實是問題所在,但似乎是由於我的按鈕實驗所致)。

另外,有什么辦法可以讓我從OS A過渡到VC B?

您可以使用此處討論的方法: 以相同的動作彈出和推入視圖控制器

換句話說,您可以使用popViewControllerAnimated:NO彈出窗口,而不必使用罐頭展開popViewControllerAnimated:YES將調用popViewControllerAnimated:YES ,現在可以直接進行推送序列。

更加干凈的方法是使用新的視圖控制器堆棧調用setViewControllers:animated:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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