3

次のストーリーボードがあります。

ここに画像の説明を入力

ご覧のとおり、5 つのタブを持つタブ バー アプリケーションがあり、ストーリーボードで各タブにロゴを割り当てました。ユーザーが特定のビューのセルをクリックすると、いずれかのタブの画像を変更したいと考えています。これどうやってするの?ストーリーボードがほとんどすべてを行ってくれるので、タブ バー ビュー コントローラーまたはアイテムのインスタンスはありません。私の質問は、画像を変更するためにどのような方法を実装する必要があるかということです。タブ バー コントローラーが必要な場合、そのインスタンスを取得するにはどうすればよいですか? また、どのクラスを指す必要がありますか?

どうもありがとうございました、

4

3 に答える 3

2

各 UIViewController には、タブ バー コントローラーがそのコントローラーを表すイメージを設定するために使用すると呼ばれるプロパティtabBarItemがあります。UITabBarItemそれを操作して、問題のコントローラーの画像を変更できます。

于 2012-07-26T02:20:28.013 に答える
2

UIViewControllerタブ バー階層の一部である任意のクラスで、タブ バー コントローラーのインスタンスを取得するために必要なことは次のとおりです。

//In UIViewController
UITabBarController *tabBarController = self.tabBarController;

その後、画像を次のように変更できます

//Suppose you want to change the 1st (0th) tab bar image
UITabBarItem * tabItem = [tabBarController.tabBar.items objectAtIndex: 0];
tabItem.image = //whatever image you want to change to
于 2012-07-26T01:21:06.647 に答える
0

少なくとも Swift を使用する Xcode 6.1.1 では、tabBarItem を直接操作してもうまくいかないことがわかりました。

しかし、@borrrdenの答えは私を正しい軌道に乗せました。UITabBarController に関する Apple のドキュメントには、次のように明確に記載されています。

タブ バー コントローラーのタブ バー ビューに直接アクセスしないでください。タブ バー コントローラーのタブを構成するには、各タブのルート ビューを提供するビュー コントローラーを viewControllers プロパティに割り当てます。

...

タブ バーの項目は、対応するビュー コントローラーを介して構成されます。タブ バー アイテムをビュー コントローラーに関連付けるには、UITabBarItem クラスの新しいインスタンスを作成し、ビュー コントローラー用に適切に構成して、ビュー コントローラーの tabBarItem プロパティに割り当てます。

したがって、それに従って、以下は私が思いついたもので、私にとってはうまくいきました。

これは Swift で書かれており、将来の読者が必要に応じて適切に翻訳できることを願っています (画像名も非常に一般的なものに変更しました)。

また、UIImage の imageWithRenderingMode メソッドを使用したので、iOS が作成する影のシルエットのデフォルト画像の代わりにカスタム画像を使用できました (そのための @NSHeffalump の回答をここで評価したいと思います...)。

    if let viewControllers = tabBarController.viewControllers as? Array<UIViewController> {
        var tabBarItemImageNames = ["TabBarItemImage0","TabBarItemImage1","TabBarItemImage2","TabBarItemImage3","TabBarItemImage4"]
        var vcIndex = 0
        for vc:UIViewController in viewControllers {
            let selectedImage = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            let image = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
            var tabBarItem = UITabBarItem(title: "", image: image, selectedImage: selectedImage)
            vc.tabBarItem = tabBarItem
            vcIndex++
        }
    }
于 2015-01-29T16:58:47.910 に答える