2013-01-02 66 views
0

我使用的NavigationController的第一個視圖控制器是「決策者」類,沒有任何UI。因此,以此爲根,檢查本地數據庫,如果我們有某些項目,決策者VC會推送某個VC,或者如果沒有項目,它將推送一個不同的VC。所以它就像一棵有兩個分支的樹。popToRootViewControllerAnimated後無法隱藏按鈕

在分支1的某個點,我們有幾個VC被推送到堆棧,用戶可能會刪除它們的最後一個「項目」,所以我想調用popToRootViewControllerAnimated並讓我的決策者正確地路由到分支2 。除了在導航欄中,除了在導航欄中,我無法擺脫第一個VC分支2中的後退按鈕,它包含分支1中最後一個VC的標題。

這是導航圖示(排序):

NavController 
DecisionMaker 
    branch1VC1 
     branch1VC2 
     branch1VC3 
    branch2VC1 
     branch2VC2 

如果我們在branch1VC3並刪除最後一個項目,然後調用popToRootViewControll erAnimated,它通過DecisionMaker並正確登陸branch2VC1,但它有一個帶有「branch1VC3」標籤的後退按鈕。按下按鈕時不會執行任何操作。我還注意到,當我點擊一個不同的按鈕 - 這將帶你到一個「關於頁面」 - 在底部導航欄中,我會看到關於頁面頂部的正常後退按鈕不在那裏,所以我沒有辦法返回。基本上,導航已經被這一點搞砸了。

我曾嘗試:

  • 調用self.navigationItem.hidesBackButton = YES在目的地VC(branch2VC1),但它不工作。
  • 調用self.navigationItem.backBarButtonItem = NULL相同。
  • 調用self.navigationItem.leftBarButtonItem = NULL相同(所有這些嘗試在viewDidLoad和viewWillAppear)
  • 在DecisionMaker VC中將self.title設置爲null。這只是將後退按鈕中的文本轉換爲「返回」,但它在導航到VC後仍然存在。
  • 調試,看看我認爲是在棧上的風投肯定是,也就是的DecisionMaker VC裏面唯一有1(本身)和branch2VC1內有2

基本上,我好像錯誤的事情可能是在同一個用戶界面循環中作爲根動作的彈出窗口,而不是新到其他分支的動作。但我不明白爲什麼這不應該是可行的。我發現this SE question,我認爲它可能是相同的,但並沒有真正的答案。

編輯: 該決議是做任何我的自定義邏輯&導航前致電super.viewWillAppear上的DecisionMaker VC。

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self decideViewController]; 
} 
+0

DecisionMaker是UIViewController的子類嗎? – Martol1ni

+0

@ Martol1ni是的。 – bobsmells

+0

@Dhara我已經問了包括這個問題在內的5個問題,並且是唯一一個被我自己以外的人解答(正確地說,它解決了我的問題)的人,我接受了答案。 – bobsmells

回答

0

如果他們在viewWillAppear推,或介於之前的新UI已經正確裝載有將almomst總是與視圖層次問題。確保在正確的時間推送新的視圖。

+0

聽起來像這可能與這個問題有很大關係。我沒有我的代碼在我面前,所以無法測試它,直到我明天回去工作,但我知道這些推動發生在viewWillAppear ......當你指出沒有道理,因爲正確的地方去做。謝謝。如果有效,我會接受你的答案。 – bobsmells

+0

就是這樣,感謝堆Martol1ni! – bobsmells

+0

沒問題,很高興它解決了。 – Martol1ni