2011-01-30 12 views
7

ナビゲーションバーの戻るボタンにカスタムアイテムを使用しようとしています。iphone - 戻るボタンのカスタムUIBarButtonItem

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"]; 
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:nil action:nil]; 
[self.navigationItem setBackBarButtonItem: customItem]; 
[customItem release]; 

最終的に私のイメージは周囲に境界線があります。私は国境を取り除くことができますどのように

Back Button

:それはこの(私のイメージは、戻るボタンである)のように見えますか?私は間違って何をしていますか?

答えて

9

画像が戻るボタンの内側に表示されていて、明らかに(あなたのスクリーンショットから)戻るボタンと同じサイズではありません。

戻るボタンを非表示にして、代わりに「左のバーボタン」に置き換えることができます。

コード:

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"]; 
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popViewControllerAnimated:)]; 
[self.navigationController setHidesBackButton:YES]; 
[self.navigationItem setLeftBarButtonItem: customItem]; 
[customItem release]; 
+0

あなたの答えをありがとう。私はさまざまな画像サイズを試しましたが、どれも動作しません。私はいつも私のスケーリングされたイメージの周りに境界線を取得します。 BackBarButtonItemの代わりにLeftBarButtonItemを使用すると、同様のことが起こります。作業イメージとコードを含むサンプルプロジェクトを知っていますか? – Denny

+0

いいえ、私はプロジェクトについては気づいていませんが、私は後で、この夜遅くまで一緒にしようとするかもしれません。 – Moshe

6

ここで更新されたバージョンです。これには、ターゲット、フォントサイズなどの設定も含まれます。

また、setHidesBackButtonnavigationControllerのプロパティとして利用できません。

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *backButtonBackgroundImg = [UIImage imageNamed:@"BackButton.png"]; 
backButton.frame = CGRectMake(0.0f, 0.0f, backButtonBackgroundImg.size.width, backButtonBackgroundImg.size.height); 
[backButton setBackgroundImage:backButtonBackgroundImg forState:UIControlStateNormal]; 
[backButton addTarget:self action:@selector(didTouchUpInsideBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]]; 
[backButton setTitle:@"MyTitle" forState:UIControlStateNormal]; 

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

これはARCプロジェクトからのものであり、オブジェクトのリリースなどはありません。

+1

ありがとうございます。これはまさに私が必要としていたもので、他の場所では見つけられませんでした。 – James

1

私はそれぞれのviewControllerのviewWillAppearで呼び出すUINavigationBarのカテゴリを作成しました。完全にiOSの6の下

UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(your button frame)]; 
[backButton setBackgroundImage:[UIImage imageNamed:@"your image name"] forState:UIControlStateNormal]; 
UIBarButtonItem *barBackButtonItem = [[UIBarButtonItem alloc] initWithCustomView: backButton]; 
[backButton addTarget:delegate action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 
self.topItem.leftBarButtonItem = barBackButtonItem; 
self.topItem.hidesBackButton = YES; 

作品

10

ホルヘのコード上に構築、これは私のソリューションです:私は私の背中のボタンの外観を変更するために使用するコードは次のようです。

私はUIViewController上の簡単なカテゴリを作成:

のUIViewController + ImageBackButton.h

#import <UIKit/UIKit.h> 

@interface UIViewController (ImageBackButton) 

- (void)setUpImageBackButton; 

@end 

のUIViewController + ImageBackButton.m

#import "UIViewController+ImageBackButton.h" 

@implementation UIViewController (ImageBackButton) 

- (void)setUpImageBackButton 
{ 
    UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 34, 26)]; 
    [backButton setBackgroundImage:[UIImage imageNamed:@"back_arrow.png"] forState:UIControlStateNormal]; 
    UIBarButtonItem *barBackButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
    [backButton addTarget:self action:@selector(popCurrentViewController) forControlEvents:UIControlEventTouchUpInside]; 
    self.navigationItem.leftBarButtonItem = barBackButtonItem; 
    self.navigationItem.hidesBackButton = YES; 
} 

- (void)popCurrentViewController 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

@end 

あなたがしなければならないすべてをあなたのすべてのvのいずれかに#import UIViewController+ImageBackButton.hです

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self setUpImageBackButton]; 
} 

すべてです:あなたのほかのView Controllerから継承しviewWillAppear:メソッドを実装IEWコントローラまたはカスタムベースのビューコントローラクラスインチ今ではどこにでもイメージの戻るボタンがあります。ボーダーなし。楽しい!

+1

ありがとうございました。あなたの時間を節約しました。 –

+1

これは素晴らしい解決策です。毎回viewWillAppearをオーバーライドしないようにするため、標準の戻るボタンが画面上にあるときに動的に検出する方法があるのだろうかと思います。 –

+0

@IvanLeskoそれは良い質問です。私は道がなければならないと確信しています。あなたが絶望的で、他のすべてが失敗した場合、UINavigationBarのサブビューを反復することができます。しかし、それは最後の手段でなければなりません:) –

関連する問題