5

ストーリーボードを使用してアプリを作成しました。すべてのビューはタブバーコントローラーによって管理されます。

したがって、起動時に(私は現在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

1 に答える 1

5

UITabBarControllerストーリーボードベースのアプリを使用しているので、ストーリーボードでルートコントローラーとして定義されていると思います。ちなみに、ウィンドウからルートビューコントローラまで歩く代わりに、識別子で取得することもできます。

選択可能なタブを制限するには、UITabBarControllerのデリゲート(つまり、に準拠するものUITabBarControllerDelegate)を設定します。

デリゲートでは、次の2つのメソッドを実装できます。

– tabBarController:shouldSelectViewController:

– tabBarController:didSelectViewController:

おそらく、ワークフローの準備が整うまで、最初に選択を制限(禁止)する必要があります。

もう1つの方法は、マイルストーンが渡されるたびに、タブバーコントローラーで「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で使用できます。これに対してルールを確認し、それに応じて各タブを制限してください。(より簡潔な方法)

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!)
                }
            }
        }
    }
于 2012-07-02T22:09:31.477 に答える