2010-01-13 46 views
6

我有一個基於標籤欄的應用程序,每個標籤欄項目上都有導航。 當我導航到任何標籤欄項目上的另一個視圖,然後單擊標籤欄項目上,然後調用該標籤欄項目上的根視圖控制器。 就像PopToRootView。 我們可以禁用這種情況嗎?禁用導航到根視圖的標籤欄

回答

3

雖然他們說你不應該子類UINavigationController,但你可以通過將UINavigationController的子類作爲子類並覆蓋- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;方法。

這樣做(而不是調用超級popToRootViewController)將阻止視圖控制器在您單擊選項欄項目時彈出。它可能會讓你陷入某種問題,但希望它對你有用。

+0

請問您可以告訴我什麼是 的含義 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 在動畫參數中傳遞爲「NO」。 – Himanshu 2010-01-15 03:54:52

+0

@mjdth你有沒有機會知道麻煩不是「蘋果拒絕的應用程序」?否則,它就像魅力一樣。感謝您的提示。 – 2012-02-03 13:56:02

6

是的,你可以通過你的視圖控制器上執行UITabBarControllerDelegate方法禁用自動popToRootViewController

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { 
    if(self.navigationController == viewController) { 
     return NO; 
    } 
    return YES; 
} 

感謝:Disable action - user taps on tabbar item to go to root view controller

2
  1. 在你的頭文件包含UITabBarControllerDelegate。
  2. 試試這個:

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
        { 
         if(bool_youDontWantPopToRootView) 
          return (tabBarController.selectedViewController != viewController); 
         return YES; 
        } 
    

對於bool_youDontWantPopToRootView,您可以添加條件到它時,你希望它表現得像默認行爲。

1

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;傳遞時「NO」中的動畫參數,你將被引導到根視圖而沒有任何動畫

你不需要,而你任何選項卡欄上挖掘其導航控制器的默認行爲,以便使用此方法它維護自己的一堆VCs