7

カスタム画像を使用してbackBarButtonItemをカスタマイズしようとしています(テキスト「back」がその画像に含まれています)。現在の結果は次のとおりです。

http://i.imgur.com/rFxFt.png

なぜこれが起こっているのか誰かが知っていますか?

これがviewDidLoadの私のコードです(実際には親コントローラーと、戻るボタンのある新しいコントローラーの両方で実行されます)

UIImage *backButtonImage = [UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"];


UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
                               initWithImage:backButtonImage
                               style:UIBarButtonItemStylePlain 
                               target:nil 
                               action:nil];


self.navigationItem.backBarButtonItem = backButton;

編集:ちなみに私はiOS 5を使用しています!外観プロキシは使用できるかもしれませんが、これまでのところ、(appDelegateの)戻るボタンに使用しようとすると、アプリが単純にクラッシュします。

4

4 に答える 4

17

さて、私は少し大まかなトリックを使用して問題を解決しましたが、少なくともそれは機能します。しかし、誰かがもっと標準的な解決策を思いついた場合は、私に知らせてください!

これが私のコードです:

UIImage *backButtonImage = [[UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault];

これは私のappdelegateの方法にあります:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

背景として使用するときに伸びを止めるために、iOS 5のアイデアを使用しました:カスタム(画像)の戻るボタンを実装する方法

しかし、設定するのではなく、それを微調整しました-

self.title = @" ";

ビューをロードするたびに(ナビゲーションバーのタイトル自体も混乱する可能性があります)

「戻る」ボタンのテキストのオフセットを画像の高さの2倍に設定しただけなので、表示されません。

ビューコントローラをポップするための独自の方法で左ボタンアイテムを使用するのではなく、なぜこのすべての問題に取り組むのですか?

主な理由は、ビューを変更するための標準の戻るボタンのスライドアニメーションが失われることです。また、これは、カスタムボタンを使用したり、戻るためのカスタムメソッドを記述したりする必要がないことを意味します。それは単に機能します。

これが他の誰かの問題も解決することを願っています、私はそれで3時間立ち往生していたことを知っています!

于 2012-06-06T03:50:13.607 に答える
0

この場合、barButtonItemをカスタムボタンに置​​き換える方が簡単であることがわかりました。

プロジェクトをどのように設計したかは正確にはわかりませんが、私にとってはうまくいきました。

カスタムボタンの設定

戻るボタン、結果の外観

次に、このコードをそれに添付します。

//go back to the previous screen

-(IBAction)back{

[self dismissModalViewControllerAnimated:YES];

}
于 2012-06-06T01:37:59.090 に答える
0

UIBarButtonItemStylePlain」の指定はボタンのスタイルを指定します。

代わりに、次の方法で戻るボタンを作成してみてください。

UIImage *backButtonImage = [UIImage imageNamed:@"Graphics/Shared/navigation_back_button.png"];
CGRect frameimg = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];
[someButton setBackgroundImage:backButtonImage forState:UIControlStateNormal];
// you have to do your own backButtonAction to pop the view controller, b.t.w.
[someButton addTarget:self action:@selector(backButtonAction:)
     forControlEvents:UIControlEventTouchUpInside];
[someButton setShowsTouchWhenHighlighted:YES];

UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:someButton];
[someButton release];

self.navigationItem.backBarButtonItem = backButton;
于 2012-06-06T01:32:40.670 に答える
0

私は今日それをたくさん試し、この解決策を得ました。背景画像ボタン画像を分離しましたが、簡単でそれほどトリッキーではないようです。

UIImage *bgImage = [UIImage imageNamed:@"the-same-image-as-your-navbar-background-image"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:bgImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:bgImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

UIImage *buttonImage = [UIImage imageNamed:@"your-back-button-image"];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:buttonImage style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
于 2014-02-13T14:15:21.127 に答える