[英]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.