8

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

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

最終的に得られるのは、周囲に境界線のある画像です。次のようになります(私の画像は戻るボタンです):

戻るボタン

どうすれば国境をなくすことができますか?私は何を間違っていますか?

4

4 に答える 4

10

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

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

コード:

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];
于 2011-01-30T18:15:18.127 に答える
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

あとは、すべてのビュー コントローラー、または他のビュー コントローラーが継承してメソッド#import UIViewController+ImageBackButton.hを実装するカスタム ベース ビュー コントローラー クラスのいずれかで行う必要があります。viewWillAppear:

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

それで全部です。これで、画像の戻るボタンがどこにでもあります。国境なし。楽しみ!

于 2013-05-30T08:37:11.900 に答える
6

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

setHidesBackButtonまた、のプロパティとして使用できないことを反映していますnavigationController

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 プロジェクトからのものであるため、オブジェクトのリリースなどはありません。

于 2012-04-20T13:58:48.277 に答える
1

各viewControllerのviewWillAppearで呼び出すUINavigationBarのカテゴリを作成しました。戻るボタンの外観を変更するために使用するコードは次のとおりです。

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;

iOS6で完全に動作します。

于 2012-12-03T17:13:43.717 に答える