2012-01-06 4 views
4

私のtabBarItemのアイコンのUITabBarSystemItemを使用したいが、私はストーリーボードを使用している。私はそれをどこに設定するか分からない。ビューのviewDidLoadに設定すると、tabBarのボタンを押すまで変更されません。それの前にそれはちょうど青ですか?平方。StoryBoardsでUITabBarItemアイコンをプログラムで設定していますか?

私が知る限り、IBインスペクタでUITabBarSystemItemsを使用することはできません。

UPDATE:すべての

まあ最初私は馬鹿です。 IBインスペクタでアイコンを完全に選択できます。

タブバー項目 - >識別子 - >アイコンを選択します。

しかし、これはプログラム的にどうやって行うのかという問題がまだ残っています。それともいつ/どこ?

+0

あなただけ馬鹿:-)じゃない:次の例では、これはNIKFontAwesomeIconFactoryを用いて行きました。他の人にそれを指摘してくれてありがとう、馬鹿です。 –

答えて

2

ストーリーボードの最初のシーンがタブバービューコントローラーであるとすると、applicationDidFinishLaunchingでアクセスできます。これは、アプリケーションデリゲートのwindowrootViewControllerです。バーアイテムが既に存在する場合にシステムアイテムに入れ替えることができるのかどうかはわかりませんが、イメージとタイトルを確実に設定できます。

7

このコードで問題を確認してください:そのアプリケーションで動作しています。

- (NSArray *) initializeViewControllers 
{ 
    NSArray *viewControllerArray = nil; 
    viewController1 = <View Init Code> 
    viewController2 = <View Init Code> 
    viewController3 = <View Init Code> 

    1stNavController = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
    UIImage *img = [UIImage imageNamed:@"tab_home"]; 
    [1stNavController .tabBarItem initWithTitle:@"Home" image:img tag:1]; 

    2ndNavController = [[UINavigationController alloc] initWithRootViewController:viewController2]; 
    img = [UIImage imageNamed:@"tab_timeDrop"]; 
    [2ndNavController .tabBarItem initWithTitle:@"Time Entry" image:img tag:2]; 

    3rdNavController = [[UINavigationController alloc] initWithRootViewController:viewController3]; 

    img = [UIImage imageNamed:@"tab_invoiceSummary"]; 
    [3rdNavController.tabBarItem initWithTitle:@"Invoice Summary" image:img tag:3]; 

    viewControllerArray = [NSArray arrayWithObjects:1stNavController,2ndEntryNavController,3rdReportNavController, nil]; 
    return viewControllerArray; 
} 

このコードは、それぞれのタブの画像付きコントローラを表示しています。ここでは、タブバーコントローラ内でNavigation Controllerを使用しました。ナビゲーションコントローラの代わりにビューコントローラを使用することもできます。

ただ、このコードを追加し、appdidfinishlaunchingメソッド内で、次のようにあなたのタブバーコントローラを初期化します。

tabbarController = [[UITabBarController alloc] init]; 

_tabbarController.viewControllers = [self initializeViewControllers]; 

self.window.rootViewController = tabbarController; 

は、それが動作願っています。

ご返信ください。ストーリーボードを使用する場合

+1

このコードは正しいです。* IF * ViewControllerを作成していて、自分でプッシュしています。しかし、質問はストーリーボードに関するものです。だから、この答えは質問とは無関係です。 –

11

、ビュー・コントローラを使用すると、システム項目の値を変更することができ、あなたがその機能を無効にし、当然そう

- (id)initWithCoder:(NSCoder*)aDecoder 
{ 
    if(self = [super initWithCoder:aDecoder]) 
    { 
     self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1]; 
    } 
    return self; 
} 

ようにそこシステムアイテムアイコンを設定できるようinitWithCoderコンストラクタを使用して初期化しますサポートされている値のいずれか。 Appleはそれらをリストしますhere

3

それはかなり簡単です!

ここで、カスタムTabBarController(例:WBTabBarController)を作成します。 StoryBoardに明示的に設定します。

WBTabBarControllerのhow - >単にviewDidLoadを上書きし、TabBarItemsの画像を設定します。

#import "WBTabBarController.h" 
#import "NIKFontAwesomeIcon.h" 
#import "NIKFontAwesomeIconFactory.h" 
#import "NIKFontAwesomeIconFactory+iOS.h" 

@interface WBTabBarController() 

@end 

@implementation WBTabBarController 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NIKFontAwesomeIconFactory *factory = [NIKFontAwesomeIconFactory tabBarItemIconFactory]; 

    UITabBarItem *item0 = self.tabBar.items[0]; 
    item0.image = [factory createImageForIcon:NIKFontAwesomeIconApple]; 

    UITabBarItem *item1 = self.tabBar.items[1]; 
    item1.image = [factory createImageForIcon:NIKFontAwesomeIconStackOverflow]; 
} 

@end 
関連する問題