1

enter image description here 如何從堆棧頂部的UINavigationController獲取對UINavigationController的backBarButtonItem的引用。在某些情況下,我想禁用回去,直到某些網絡代碼完成。在堆棧頂部訪問UINavigationController

self.parentViewController.navigationItem.backBarButtonItem.target = self; self.parentViewController.navigationItem.backBarButtonItem.action = @sel...;

不起作用 委託方法

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item

也不起作用。

+0

需要清楚的是,您是否希望禁用問題視圖控制器的後退按鈕,而不管您在導航控制器堆棧中的位置。或者你是否想要攔截正在按下的後退按鈕並進行干預? – Spectravideo328 2013-03-03 19:35:08

+0

攔截。在某些情況下需要停止按鈕。 – Jordan 2013-03-03 21:14:40

+0

QuestionVC看起來不像是Nav Controller堆棧的一部分。你是否錯過了從主VC到標籤欄控制器的連接?你在問題中稱什麼「堆棧頂部」? – Spectravideo328 2013-03-03 21:47:55

回答

1

的答案和建議:

答案:我會建議你改變你的MVC模式稍微有模型中的布爾屬性,是或者根據網絡活動是否已完成,然後用關閉您的QuestionsVC採用的委託/協議,在該屬性更改時更新後退按鈕設置。您需要在QuestionVC中的代理方法中添加以下內容:

[self.tabBarController.navigationItem setHidesBackButton:YES animated:YES]; 

我測試了它,它工作正常。

建議:從來不建議在UINavigationController中使用UITabBarController(建議只使用反義詞)。在你深入到你的項目之前,我會做相應的調整。

更新: 我可以理解,需要一個mainVC作爲啓動VC的按鈕,以「開始」,如果你願意。你是正確的,你需要一個NavController能夠推動/彈出VC並在Storyboard中使用segues。但是,這不是顯示一系列風險投資的唯一方式,您可以提交/解散風險投資。所以你的情況:

1 - 我會刪除通過在NavController左側移動的箭頭MainVC

左側的第一NavController

2-充分利用MainVC開始VC(切入點)

3-將主VC與TabBar控制器斷開(刪除該鏈接),因爲如果沒有導航控制器,您將無法在SB中使用輪巡。您將不得不實例化並呈現該標籤欄控制器。

4-添加一個新的目標文件(.m/.h) - UITabBarController的子類,並將IB中的tabBarController的類更改爲您的子類的名稱。如果它不顯示在IB的班級列表的下拉列表中,則可能必須構建/清除或重新啓動xcode。

5-在mainVC中創建一個IBAction方法,並將其鏈接到Main VC中的按鈕。

6-這種方法(在主VC),添加以下代碼:

yourTabBarControllerSubClassName* myTabController= [self.storyboard instantiateViewControllerWithIdentifier:@"theTab"]; 
[self presentViewController:myTabController animated:YES completion:nil]; 

7-確保在您的SB您選擇的標籤欄控制器和身份檢查,把SB ID爲「theTab」並檢查「使用SB ID」。

8-如果問題VC或狀態表VC在每個VC中都有一系列VC,則可以將每個VC嵌入到導航控制器中,這樣就可以了。

在這種情況下,您可能不需要擔心後退按鈕,因爲它不再存在!

祝你好運

希望這會有所幫助。

+0

你應該把它放在QuestionsVC中,因爲那是你想隱藏導航條中後退按鈕的VC。它應該工作。 – Spectravideo328 2013-03-04 00:56:40

+0

好的...是的,不知道我在想什麼,你的回答是正確的。還有一個很好的建議。我在UINav中嵌入了MainVC,所以我可以在MainVC上推TabBVC。我不能從沒有UINav的東西推動,這就是爲什麼它在那裏。對建議開放;) – Jordan 2013-03-04 01:15:27

+0

我將根據建議根據您項目的有限知識編輯我的答案! – Spectravideo328 2013-03-04 02:04:20