6

こんにちは、インターフェイス ビルダーではなく xcode でタブ バー コントローラーを作成しています。タブのビューのタイトルはタブのタイトルを設定しますが、画像を設定する方法がわかりません。

誰でも助けることができますか?

4

5 に答える 5

20

View Controllerの配列を取得してから画像を追加できることがわかりました:

           NSArray *tabs =  tabBarController.viewControllers;
UIViewController *tab1 = [tabs objectAtIndex:0];
tab1.tabBarItem.image = [UIImage imageNamed:@"clockicon.png"];
UIViewController *tab2 = [tabs objectAtIndex:1];
tab2.tabBarItem.image = [UIImage imageNamed:@"nearest.png"];
于 2009-06-15T20:57:35.757 に答える
12

UIViewController には、imageプロパティを持つtabBarItemプロパティがあります ( UIBarItemクラスUITabBarItemサブクラスから継承されます)。例えば:

viewController.tabBarItem.image = [UIImage imageNamed:@"foo.png"];
于 2009-06-10T20:37:17.763 に答える
2

UITabBarControllerタブ バー アイテムのカラフルなイメージ、バー アイテムのフォント、タブ バーの背景イメージなど、多くの特性は許可されません。私は回避策を見つけました。1 つがxib を介して (アプリ デリゲートではなく) にUITabBarController追加されると、 ( 「ビュー」という名前の) のファイルもあります。タブバーとタブバーアイテム、ラベルなど、必要なものの画像を含む画像ビューを追加して、タブバーのフレームのすぐ下に収まるようにします。ここで、タブバットを非表示にする必要がありますが、それでも機能します。のタブバーのアルファ値を減らしますUITabBarControllerUIViewUITabBarControllerUITabBarControllerxib tp 0.02 以降 (0.01 未満では、タブ バーはタッチ操作をキャッチしません)。あなたは終わった!これらすべてをプログラムで実行する場合でも...これらは非常に些細なことです...この回り道は、開発者がサブクラス化できないというアップルのポリシーを回避しUITabBarControllerます。そう...乾杯:)

于 2011-02-05T18:23:45.120 に答える
1

私はすぐに次のクラスを作成し、UITabBarController からのタブ ビューの表示/非表示は魔法のように機能しました。

TabBarDesigner.h

#import <Foundation/Foundation.h>
@interface TabBarDesigner : NSObject 
{

}

+(void) setTabBarController:(UITabBarController *)tabBarController
                      items:(NSArray *)tabBarItems 
            viewControllers:(NSArray *)viewControllers;

+(void) removeItemsInRange:(NSRange) range;

@end

TabBarDesigner.m

#import "TabBarDesigner.h"

static NSArray *_tabBarItems = NULL;
static NSArray *_viewControllers = NULL;
static UITabBarController *_tabBarController = NULL;

@implementation TabBarDesigner

+(void) setTabBarController:(UITabBarController *)tabBarController
                      items:(NSArray *)tabBarItems 
            viewControllers:(NSArray *)viewControllers
{
    if (tabBarItems && viewControllers && tabBarController)
    {
        if ([tabBarItems count] == [viewControllers count])
        {
            [_tabBarItems release];
            [_viewControllers release];
            _tabBarItems = [tabBarItems copy];
            _viewControllers = [viewControllers copy];
            _tabBarController = tabBarController;
        }
    }
}

+(void) removeItemsInRange:(NSRange) range
{
    if (_tabBarController)
    {
        if ( range.location < ([_tabBarItems count] - 1) )
        {
            if ( (range.length + range.location) < [_tabBarItems count] )
            {
                NSMutableArray *tabBarItems = [_tabBarItems mutableCopy];   
                [tabBarItems removeObjectsInRange:range];
                NSMutableArray *viewControllers = [_viewControllers mutableCopy];
                [viewControllers removeObjectsInRange:range];
                [_tabBarController setViewControllers:viewControllers];
                 NSUInteger i;
                for (i = 0; i< [viewControllers count]; i++) 
                {
                    UIViewController *vC = [viewControllers objectAtIndex:i];
                    vC.tabBarItem.image = [[tabBarItems objectAtIndex:i] image];
                    vC.tabBarItem.title = [[tabBarItems objectAtIndex:i] title];
                    vC.tabBarItem.tag = [[tabBarItems objectAtIndex:i] tag];
                }

                [tabBarItems release];
                [viewControllers release];

            }


        }
    }
}


@end

このクラスの使用方法のサンプル: MyAppDelegate.m 内

#import "TabBarDesigner.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [TabBarDesigner setTabBarController:_tabBarController
                                  items:[_tabBarController.tabBar items] 
                        viewControllers:[_tabBarController viewControllers]];
    // remove the first 3 tabs
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,3)];
    // show all tabs
    [TabBarDesigner removeItemsInRange:NSMakeRange(0,0)];
    // continue with your code
}

乾杯!

于 2011-08-05T06:46:47.603 に答える
0

スイフト5.4

let tabs = tabBarController.viewControllers
let tab1 = tabs[0]
tab1.tabBarItem.image = UIImage(named: "clockicon.png")
let tab2 = tabs[1]
tab2.tabBarItem.image = UIImage(named: "nearest.png")
于 2021-06-23T17:46:21.440 に答える