2012-08-25 76 views
0

讓我舉一個例子,我想要做什麼: 我有一個包含4個TabBarItems的選項卡,因此它包含4個控制器。並且有一個控制器不能顯示在標籤欄的圖標中,但當這些控制器中的一個被觸摸時,它會顯示出來。因此,當它顯示時,tabbar不能有任何選定的選項卡,每個項目必須取消選擇。它必須像一個沒有顯示在標籤圖標中的鬼控制器,但它實際上是一個在標籤欄控制器中的控制器。顯示在UITabBarController的控制器列表中不存在的UIViewController

達到此目的的最佳方法是什麼? Fyi,我不想要模態對話框,Tabbar必須始終在下面可見。

+0

你試圖打破UITabBarController的行爲。您可以在其中一個選項卡中放置UINavigationController,然後推送一個視圖控制器,但該選項卡仍將被選中。或者,你可以添加一個視圖到窗口,但你會基本上模態行爲。 – jessecurry

回答

0

可能有幫助的一件事是知道標籤之間的轉換何時發生。如果您在轉換髮生後立即顯示幻影視圖,則可能有足夠的控制權來執行您想要的操作。

下面是我如何做到這一點:首先,子類UITabBarController TabViewController(例如)。在你TabViewController,包括這種方法:

// Pass this message on to views so they know when transitions are occuring 
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 

    UIViewController <UITabBarControllerDelegate> *obj; 

    for (obj in self.viewControllers) { 
     if ([obj respondsToSelector:_cmd]) { 
      [obj tabBarController:tabBarController didSelectViewController:viewController]; 
     } 
    } 
} 

設置每個選項卡式視圖類的採用UITabBarControllerDelegate協議。隨後,包括像這樣的方法在每個類爲「攔截」的過渡事件:

// This is called when a transition between tabs happens 
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 

    if ([viewController isEqual:self]) { 
     // Transitioning to me 

     // Do stuff 
    }  

    else { 
     // Transitioning to someone else 

     // Do stuff 
    } 
} 

(注:有可能實現這種方法更簡潔的方式,但它一直致力於爲我好...)

相關問題