2012-07-12 45 views
0

我有UITabViewController運行UINavigationController。在每個選項卡中,我有一個不同的TableView,它們是我的應用程序樹的根。如何將我的標籤重置爲默認視圖?

當我點擊一個表的項目,它進入下一級查看另一個,詳細的TableView,屏幕上仍然有TabBarNavigationBar。除了一件事外,它完美地工作。如果我在一個選項卡中查看詳細信息,則切換到另一個選項卡,然後再返回,然後我仍然可以看到我的詳細信息。我想要實現的是在離開它後重置標籤。

我希望我必須在viewDidUnload或類似的東西,但找不到正確的解決方案。

希望你能幫上忙。

回答

4

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

[viewController.navigationController popToRootViewControllerAnimated:YES]; 

將在選項卡的視圖控制器導航到每當選擇的標籤根視圖。

在應用程序委託中保持主窗口視圖控制器(標籤欄控制器)實例完全可以。

你需要添加什麼是設置委託或任何其他初始化類是標籤欄控制器的委託是這樣的:

myTabBarController = [UITabBarController alloc ... 
myTabBarController.delegate = self; // the app delegate will be also the tab bar delegate 
在應用程序委託

,那麼你將以下方法添加到應用程序代表:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
    [viewController.navigationController popToRootViewControllerAnimated:YES]; 
} 

選中標籤欄時,標籤欄控制器將調用此方法。 你也想使應用程序委託確認UITabBarControllerDelegate這樣:

@interface PSAppDelegate : UIResponder <UITabBarControllerDelegate> 

,可以讓編譯器知道,應用程序的委託必須或有可能在協議中聲明的方法,也將讓你如此方便自動這種方法的比較。

+0

它什麼都不做,但也許我需要定義哪個視圖是根視圖?如果是的話 - 我該怎麼做?附:'popToRootViewController'未定義,我使用'popToRootViewControllerAnimated:(BOOL)' – cyborg86pl 2012-07-12 14:55:49

+0

@ cyborg86pl感謝您的編輯。你確定你有'UINavigationController'作爲選項卡控制器嗎? 'didSelectViewController'方法必須放在標籤欄的委託類中,檢查調用的方法。 'navigationController'屬性爲您提供了視圖控制器推送到的導航控制器,即如果使用標籤欄委託並且您有'UINavigationController'選項卡控制器,則代碼應該工作得很好。 – 2012-07-12 15:04:28

+0

我是iOS新手,所以看起來我的問題位於我的代碼更深處。我以編程方式在我的AppDelegate中放入了'UITabBarController'。我是否需要將代碼放在AppDelegate實現中或其他位置?我現在很困惑...還試過[that](http://stackoverflow.com/questions/4487718/how-do-i-integrate-poptorootviewcontrolleranimated-with-my-tabs?answertab=active#tab-top )但它仍然不夠... – cyborg86pl 2012-07-12 16:03:57

0

這樣做的一種方法是讓視圖控制器與tabviewcontroller關聯,然後創建新的對象。

self.tabBarController?.viewControllers!將獲得標籤欄的viewController數組。在我的情況下,他們是一個UINavigationControllers,但他們可以是任何東西。然後我得到與之相關的viewController並重置它。

如果你沒有導航控制器,你可以創建新的視圖控制器對象,並去那裏。下面

是在我的情況的解決方案(與navcontroller)

let vc = self.tabBarController?.viewControllers![0] as! UINavigationController 
    let newVC = YourViewControllerClass() 
    vc.viewControllers[0] = newVC as UIViewController 

這取代了舊的(人口)VC用一個新的!

相關問題