2012-01-20 7 views
1

私はタブバーのコントローラを有しています。このxibでは、4つのタブバー項目を追加し、すべてのタブバー項目の画像を設定しました。このため、私は2つの問題直面しています:タブバーアイテム画像とselectedImage

1)画像は白色であるが、私は、アプリケーションを実行すると、そのは、灰色としてタブバーの項目にすべての画像を示します。元のイメージと同じように見えるようにするにはどうすればいいですか?

2)私は、現在選択されているタブバーの項目に追加することを、選択した画像を持っています。私はどうすればいいですか?

NICKさんCODE後に更新

ねえ、iOSの5で、あなたはタブバーの選択項目と選択されていない画像を(カテゴリソリューションはわずか4上で動作します)を設定するためにアプリのデリゲートのコードを以下のように記述する必要があります。

if ([[[UIDevice currentDevice] systemVersion] floatValue]>4.9) { 
    NSString *selectedImageName,*unselectedImageName; 

    for (int counter = 0; counter < [self.tabBarController.tabBar.items count]; counter++) { 
     if (counter==0) { 
      selectedImageName = <someImagename>; 
      unselectedImageName = <someImagename>; 
     } 
     else if (counter==1) { 
      selectedImageName = <someImagename>; 
      unselectedImageName = <someImagename>; 
     } 
     . 
        . 
     else { 
      selectedImageName = <someImagename>; 
      unselectedImageName = <someImagename>; 
     } 
     UIImage *selectedImage = [UIImage imageNamed:selectedImageName]; 
     UIImage *unselectedImage = [UIImage imageNamed:unselectedImageName]; 

     UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:counter]; 
     if ([item respondsToSelector:@selector(setFinishedSelectedImage:withFinishedUnselectedImage:)]) { 
      [item setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 
     } 
    } 
} 
+0

- カテゴリUItabBarItem(CustomUnselectedImage)を追加 - =(

* .hの

@interface CustomTabBarItem : UITabBarItem { UIImage *customHighlightedImage; UIImage *customNormalImage; } @property (nonatomic, retain) UIImage *customHighlightedImage; @property (nonatomic, retain) UIImage *customNormalImage; - (id)initWithTitle:(NSString *)title normalImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage tag:(NSInteger)tag; @end 

と* .M

#import "CustomTabBarItem.h" @implementation CustomTabBarItem @synthesize customHighlightedImage; @synthesize customNormalImage; - (id)initWithTitle:(NSString *)title normalImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage tag:(NSInteger)tag{ [self initWithTitle:title image:nil tag:tag]; [self setCustomNormalImage:normalImage]; [self setCustomHighlightedImage:highlightedImage]; return self; } - (void) dealloc { [customHighlightedImage release]; customHighlightedImage=nil; [customNormalImage release]; customNormalImage=nil; [super dealloc]; } -(UIImage *) selectedImage { return self.customHighlightedImage; } -(UIImage *) unselectedImage { return self.customNormalImage; } @end 

幸せコーディング=]に影響を与えていませんhttp://sugartin.info/2011/07/01/customizing-tab-bar/ - - このチュートリアル一度を通してサンプルコードを含むuは必要なすべてをイラスト運の乾杯&ベスト。 –

+0

実際には、カテゴリはiOS5でも動作しますが、シミュレータでは動作しません。 –

答えて

6

このカテゴリをプロジェクトに追加します。それはプライベートAPIを使用しているよう

@implementation UItabBarItem (CustomUnselectedImage) 

- (UIImage *)unselectedImage 
{ 
    return self.image; 
} 

@end 

これは見えるかもしれませんが、私は、これは上で複数回使用さ見てきました:それは彼らに灰色のグラデーションを適用するのではなく、無効状態としてあなたの元の画像を使用するために、タブバーの項目を強制します承認されたアプリそれはちょうど1をオーバーライドし、プライベートメソッドを呼び出していない、実際にます。

あなたが選択し、選択されていない画像に別の画像を指定する必要がある場合は、あなたの最善の策は、このように、UITabBarItemとswitch文のタグプロパティを使用することが考えられます:

@implementation UItabBarItem (Custom) 

- (UIImage *)selectedImage 
{ 
    switch (self.tag) 
    { 
     case 1: 
      return [UIImage imageNamed:@"tab-selected1.png"]; 
     case 2: 
      return [UIImage imageNamed:@"tab-selected2.png"]; 
     etc... 
    } 
} 

- (UIImage *)unselectedImage 
{ 
    switch (self.tag) 
    { 
     case 1: 
      return [UIImage imageNamed:@"tab-unselected1.png"]; 
     case 2: 
      return [UIImage imageNamed:@"tab-unselected2.png"]; 
     etc... 
    } 
} 

@end 

そして、インターフェースビルダーでタブバーアイテムの画像を無視するだけで設定できます。代わりに、タグをスイッチステートメントで指定したイメージと一致するように設定します。

アプリに複数のタブバーがあり、このようにすべてのタブバーをオーバーライドしたくない場合は、これらのメソッドをカテゴリではなくUITabBarItemのサブクラスで定義できます。その後、nibファイル内のタブバー項目のクラスを、通常のUITabBarItemsではなくカスタムサブクラスに設定することができます。これらの項目のみが影響を受けます。

EDIT:

ノートのiOS 5のようUIAppearance APIを使用してこれを行うには良い方法があること。このテクニックはまだ機能するはずですが、正式にサポートされているアプローチがあるので、アップルがそれを打ち始めるかどうかは分かります。 iOS 4のサポートが本当に必要な場合を除き、新しい方法を使用する方がよいでしょう。私にとってhttp://blog.theanalogguy.be/作品に基づいて

+0

ちょっとニック、1つの疑問...私はこのメソッドを(私のコードで)どこで呼びますか? – anshul

+0

Thanx Nick ..私は私のdidSelectViewControllerデリゲートメソッドのタブバーコントローラのこれを試してみました。 Thanx Man [self.tabBarController.tabBarItem setImage:[self.tabBarController.tabBarItem unselectedImage]]; もう1つ質問があります:iOS 5で動作するかどうかは、シミュレータ4.3でのみテストし、5.0ではテストしていないためですか? – anshul

+0

いいえ、あなたは誤解しています。あなたはこのコードを呼び出すのではなく、単にそれを.mファイルに置くだけです。自動的に呼び出されます。 XcodeでUITabBarItemで新しいカテゴリを作成し、それをCustomUnselectedImageと呼んでください。もちろん、iOS 5でも動作するはずですが、シミュレータでは動作しない可能性があります。 –

関連する問題