2012-04-19 81 views
5

我已經使用故事板構建了我的應用程序,並且所有視圖都由tabbarcontroller管理。在基於storyboard的應用程序中禁用/啓用UITabBarController中的選項卡

所以在啓動(我只工作目前iPad的UI),它這樣做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    { 
     UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
     UISplitViewController *splitViewController = [tabBarController.viewControllers objectAtIndex:0]; 
     UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
     splitViewController.delegate = (id)navigationController.topViewController; 

     UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; 
     ProductionMasterViewController *controller = (ProductionMasterViewController *)masterNavigationController.topViewController; 
     controller.managedObjectContext = self.managedObjectContext; 
    } 
} 

我希望能夠根據用戶輸入啓用或禁用tabBarController標籤(所以,例如,需要在第一個標籤中選擇一個項目才能訪問默認禁用的第二個和第三個標籤)

我不清楚的是如何訪問標籤以便啓用/消除它們。我想創建的appdelegate的一個實例,然後像做

AppDelegate *d = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
UITabBarController *tabs = (UITabBarController *)[d.window rootViewController]; 
[[[[tabs tabBar] items] objectAtIndex:2] setEnabled:YES]; 
[[[[tabs tabBar] items] objectAtIndex:3] setEnabled:YES]; 
[[[[tabs tabBar] items] objectAtIndex:4] setEnabled:YES]; 

(這有點兒好像它應該工作,但它似乎也相當噁心。)

回答

4

由於您使用的是基於故事板的應用,我假設你有故事板中定義的UITabBarController作爲根控制器。順便提一句,你也可以通過標識符來取代它,而不是從窗口走到根視圖控制器。

通過設置UITabBarController的代表(即符合UITabBarControllerDelegate的代理)來實現限制哪些選項卡是可選的。

在委託時,就可以實現這兩個方法:

– tabBarController:shouldSelectViewController:

– tabBarController:didSelectViewController:

有可能的,你只需要第一個限制(禁止)的選擇,直到您的工作已準備就緒。

另一種方法是在標籤欄控制器上設置「viewControllers」屬性,每次傳遞一個里程碑時,在每個里程碑處,將更多的視圖控制器設置到該屬性中,這將打開選擇的其他選項卡項目。

SWIFT 3

(擴大爲了便於理解)

let arrayOfTabBarItems = tabBarController?.tabBar.items 

     if let barItems = arrayOfTabBarItems, barItems.count > 0 { 
      os_log("barItems.count is now ", barItems.count) 
      tabBarItem0 = barItems[0] 
      tabBarItem0.isEnabled = true 
      tabBarItem1 = barItems[1] 
      tabBarItem1.isEnabled = true 
      tabBarItem2 = barItems[2] 
      tabBarItem2.isEnabled = true 
      tabBarItem3 = barItems[3] 
      tabBarItem3.isEnabled = true 
      tabBarItem4 = barItems[4] 
      tabBarItem4.isEnabled = true 
     } 

這可以在viewWillAppear中使用的EA ch選項卡控制器。檢查你的規則,並相應地限制每個標籤。 (更簡潔的方法)

let arrayOfAllTabBarItems = tabBarController?.viewControllers 
    if let tabBarArray = arrayOfAllTabBarItems, tabBarArray.count > 0 { 
     for x in 0...tabBarArray.count-1 { 
      let tabBarItem = tabBarArray[x] 
      if tabBarItem.title != nil { 
       if tabBarItem.title == "Tab1" || tabBarItem.title == "MyTab" || tabBarItem.title == "Tab2Check" { 
        tabBarItem.tabBarItem.isEnabled = !(isMyRuleTrue!) 
       } 
      } 
     } 
    } 
相關問題