2011-10-25 7 views
1

私はカスタムUINavigationBarをコーディングしています。アプリがiOS 4で動作するはずなので、new customization options available on iOS 5を使用することはできません。カスタムUIBarButtonItemを描画する正しい方法は何ですか?

つまり、下の図のように、うまく機能しているカテゴリを避けるために、私はUINavigationBarをサブクラス化しました。

CustomUINavigationBar

UIBarButtonItemsは同様に動作しません。

私はUIBarButtonItemクラスのサブクラス化とdrawRectメソッドのオーバーライドを試みましたが、何も変更されませんでした。

CustomUIBarButtonItem *backButton = [[CustomUIBarButtonItem alloc] initWithTitle:@"Notícias" style:UIBarButtonItemStylePlain target:nil action:nil]; 
self.navigationItem.backBarButtonItem = backButton; 
[backButton release]; 

また、以下の画像も設定しようとしましたが、これも機能しませんでした。だから、

noticias_back.png

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"noticias_back.png"] style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = backButton; 
[backButton release]; 

Wrong custom back button

、どのように私はこれを行うことになっていますか?

+0

http://charles.lescampeurs.org/2011/02/10/tint-color-uibutton-and-uibarbuttonitemこれがあなたに役立つことを願って – Marios

+0

あなたはこれを理解したことがありますか? – bryanmac

答えて

0

カスタムボタンを押したりモーダルで表示する前に、カスタムボタンを設定する必要があります。例:

ENPurchaseEditView *purchaseView = [[ENPurchaseEditView alloc] initWithNibName:@"ENPurchaseEditView" bundle:nil]; 

// customized left button to cancel - not back. 
ENBarButtonImageItem *cancelBtn = 
[[ENBarButtonImageItem alloc] initWithFrame:CGRectMake(0, 0, 29, 29) 
             image:[UIImage imageNamed:@"btn_cancel.png"] 
          backgroundImage:nil 
            target:purchaseView 
            action:@selector(cancel:)]; 

// setLeftBarButtonItem before you push or present. 
// in this view, I also setHidesBackButton = YES in the init so my custom left 
// shows up. 
[[purchaseView navigationItem] setLeftBarButtonItem:cancelBtn]; 
[cancelBtn release];  

// Edit purchase in full modal view. 
// This could be a push - in my case I'm presenting a navController. 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:purchaseView]; 
[[self navigationController] presentModalViewController:navController animated:YES]; 

私の場合、ENBarButtonImageItemはカスタムUIBarButtonItemです。ここに私のクラスです:

#import "ENBarButtonImageItem.h" 

@implementation ENBarButtonImageItem 

- (id)initWithFrame:(CGRect)frame 
       image:(UIImage*)image 
    backgroundImage:(UIImage*)bgImage 
{ 
    _button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [_button setFrame:frame]; 

    self = [super initWithCustomView:_button]; 
    if (self) 
    { 
     if (image) 
      [_button setImage:image forState:UIControlStateNormal]; 

     if (bgImage) 
      [_button setBackgroundImage:bgImage forState:UIControlStateNormal]; 

    } 
    return self;  
} 

- (id)initWithFrame:(CGRect)frame 
       image:(UIImage*)image 
    backgroundImage:(UIImage*)bgImage 
      target:(id)target 
      action:(SEL)selector 
{ 
    self = [self initWithFrame:frame image:image backgroundImage:bgImage]; 
    if (self) 
    { 
     [_button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
    [_button release]; 
} 

- (void)addTarget:(id)target action:(SEL)selector forControlEvents:(UIControlEvents)controlEvents 
{ 
    [_button addTarget:target action:selector forControlEvents:controlEvents]; 
} 

- (void)setImage:(UIImage *)image forState:(UIControlState)state 
{ 
    [_button setImage:image forState:state]; 
} 

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 
{ 
    [_button setImage:image forState:state]; 
} 

@end 
1

は私だけのような何かをするが...

UIButton *searchButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[searchButton setBackgroundImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal]; 
[searchButton setBackgroundImage:[UIImage imageNamed:@"search_pressed"] forState:UIControlStateHighlighted]; 
[searchButton addTarget:self action:@selector(selectedSearch) forControlEvents:UIControlEventTouchUpInside]; 
[searchButton setImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal]; 
[searchButton sizeToFit]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:searchButton]; 
関連する問題