所以我有一個iPhone應用程序。它具有簡單的結構,全部基於UINavigationController
。iPhone的故事板,以編程方式調用segues,導航問題
我有一個故事板,有一個視圖,從另一個視圖到另一個視圖,等現在這個其他視圖有一個UITextView
,我不想在這個屏幕上編輯 - 如果用戶點擊這個,我想它而不是飛到基本上具有相同文本視圖的第二屏幕,但是該屏幕是全屏的,並且用戶將在返回到前一屏幕之前編輯該屏幕上的文本。
因此我捕獲了textViewShouldBeginEditing
方法。我以前,在故事板編輯器,手動創建從以前的視圖控制器到這個新的視圖控制器推SEGUE,並把它命名,這樣我可以把它通過它的身份,這我做:
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
// This is called when the user clicks into the textView as if to edit it.
// Instead of editing it, go to this other view here:
[self performSegueWithIdentifier:@"editMemoSegue" sender:self];
// Return NO, as I don't actually want to edit the text on this screen:
return NO;
}
似乎合理。它的工作原理。八九不離十。事實上,它確實讓我對其他觀點產生了興趣。其他視圖的事件啓動後,我將其設置爲文本視圖以成爲第一響應者,我編輯該屏幕上的文本。每個人都很開心。
直到我想使用後退按鈕返回到上一個視圖。
然後我很快發現 - 我的導航堆棧是foobared。大多數情況下,出於某種原因,我有兩個新的編輯控制器實例,所以當我第一次點擊後退按鈕時,我又重新獲得了相同的內容。然後,奇怪的是,偶爾它會按預期工作,而且我只會看到我以前的控制器只有一次後退。
我開始閱讀日誌,我發現這一點:
2012-12-09 09:41:03.463 APP[8368:c07] nested push animation can result in corrupted navigation bar
2012-12-09 09:41:03.818 APP[8368:c07] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-12-09 09:41:03.819 APP[8368:c07] Unbalanced calls to begin/end appearance transitions for <SecondController: 0x83881d0>.
所以,很顯然,我在做正確的東西在這裏。問題是,什麼?我如何以正確安撫iPhone框架的Tiki神的方式來做我想做的事?
該錯誤消息,「嵌套推動畫」通常是由多次推送到相同的控制器。上面的代碼是你執行的唯一的地方嗎?你的故事板中是否只有導航控制器和上述2個控制器? – rdelmar
該代碼是調用segue的唯一地方。該控制器是導航堆棧中的第二個控制器(A> B> C,這發生在B> C上)。 – mschultz
某處必須設置錯誤。你發佈的代碼應該可以正常工作。如果你可以在某個地方發佈你的項目,我可以看看它,但沒有看到這個項目就沒有別的可說的了。 – rdelmar