2012-04-19 15 views
5

私はストーリーボードでアプリケーションを構築しており、すべてのビューはtabbarcontrollerによって管理されています。ストーリーボードベースのアプリケーションで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内のタブを有効または無効にすることができるようにしたいですたとえば、デフォルトでは無効になっている2番目と3番目のタブにアクセスするには、最初のタブでアイテムを選択する必要があります)

タブにアクセスする方法がわかりませんそれらを有効/無効にします。私は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に準拠するもの)を設定します。デリゲートで

、あなたはこれらの2つの方法を実装することができます:ワークフローの準備が整うまで、多分

– tabBarController:shouldSelectViewController:

– tabBarController:didSelectViewController:

を、あなただけ、(抑制)を制限する最初の選択が必要です。

もう一つのアプローチは、マイルストーンが渡されるたびに、タブバーコントローラに「viewControllers」プロパティを設定することです。各マイルストーンで、より広範なビューコントローラの配列をこのプロパティに設定します。追加のタブ項目の選択。

SWIFT 3

これはEAのあなたのviewWillAppearで使用することができ

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 
     } 

(理解を容易にするために拡張) 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!) 
       } 
      } 
     } 
    } 
関連する問題