2011-11-22 17 views
8

UIViewControllersにはUINavigationControllersが多く含まれています。 UINavigationBarには、「戻る」ボタンと「ホーム」UIButtonが必要です。これらはすべて正常に動作します。ナビゲーションバーのカスタム戻るボタン

しかし、私のUIViewControllersには長い名前が付いていますが、時にはあまりにも小さい場所が残っています。私は、「戻る」カスタムで(それは前のビューのタイトルを示している)、「戻る」ボタンのオリジナルラベルを交換しようとしているが、私はそれが動作しませんでした試みたものは何でも:

// Title didn't change 
[self.navigationItem.backBarButtonItem setTitle:@"Back"]; 

// Action didn't set, no response from button (button didn't do anything) 
[self.navigationItem.leftBarButtonItem 
    setAction:self.navigationItem.backBarButtonItem.action]; 

そして、私はこの質問のようなスタイルを持っているために「戻る」ボタンを必要とする:Draw custom Back button on iPhone Navigation Bar

+0

あなたが参照している質問の答えは十分ではありませんか? –

+0

前のビューのタイトルを設定(=変更) – SentineL

+0

[UINavigationBarの戻るボタンのタイトルを「戻る」に変更する方法](http://stackoverflow.com/questions/8046622/how-to-change-theバックウインドウとバックボタンとの間) – jrturton

答えて

6

は、以下のことを試してみてください。この

UIBarButtonItem *backBarBtnItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(popViewController)]; 
[self.navigationItem setBackBarButtonItem:backBarBtnItem]; 

- (void)popViewController 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

は動作しませんでした。私は通常のバックボタンを削除して自分自身を追加することができますが、いつものようにその形にする方法は? – SentineL

+0

あなたはそのような形の画像を持っているカスタムボタンを追加する必要があることを私は推測します... [[UIBarButtonItem alloc] initWithCustomView:customButton]; –

+0

これはちょっと野蛮人のコードですが、他の解決策はありません...だから、しばらく野蛮人にさせてください:)とにかくお返事ありがとうございます。 – SentineL

50

を試してみてください。これは間違いなく動作します:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *buttonImage = [UIImage imageNamed:@"back.png"]; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setImage:buttonImage forState:UIControlStateNormal]; 
    button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
    [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
    self.navigationItem.leftBarButtonItem = customBarItem; 
    [customBarItem release]; 
} 

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

を使用すると、ナビゲーションバーのサイズ名back.pngを使用して、リソースフォルダ内の[戻る]ボタンとボタン画像を持っていることを確認してください。

他の援助が必要な場合は無料です。

+0

私は、次のように強調表示された状態の画像を設定することによって、ストックiOSの戻るボタンと区別できないカスタム戻るボタンを作ることができます。 –

+0

このコードでカスタムバックボタンにタイトルを追加できないのはなぜですか? '[button setTitle:@" Back "forState:UIControlStateNormal]; ' – ArVan

+0

ナビゲーションバーにはUIBarButtonタイプのボタンがあります。あなたのニーズに応じてカスタムコンテンツを持つUIBarButtonアイテムを作成したり、標準システムアイテムを作成できます。 –

2

私は好きですが、すべての場所でこれをやっている場合は、カテゴリとしてアニルのソリューションを実装する方がいいでしょう:

単に
@interface UIViewController (CustomBackButton) 

- (void) setCustomBackButton; 
- (void) back; 

@end 

@implementation UIViewController (CustomBackButton) 

- (void) setCustomBackButton 
{ 
    UIImage *buttonImage = [UIImage imageNamed:@"back.png"]; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setImage:buttonImage forState:UIControlStateNormal]; 
    button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
    [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
    self.navigationItem.leftBarButtonItem = customBarItem; 
} 

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

@end 
1

より:

UIBarButtonItem *barBtnItem = 
    [[UIBarButtonItem alloc]initWithTitle:@"Indietro" 
            style:UIBarButtonItemStyleBordered 
           target:self 
           action:@selector(pop)]; 
[barBtnItem setTintColor:[UIColor whiteColor]]; 
self.navigationItem.leftBarButtonItem = barBtnItem; 
7

ターゲット: UINavigationBarのすべての戻るボタンを白いアイコンにカスタマイズする

手順: "didFinishLaunchingWithOptions" AppDeleteの方法で 1:

UIImage * backBtnIcon = [UIImage imageNamed: "navBackBtn" @]。一般的なスーパーのViewControllerクラスの "のviewDidLoad" メソッド2.in

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
    [UINavigationBar appearance].tintColor = [UIColor whiteColor]; 
    [UINavigationBar appearance].backIndicatorImage = backBtnIcon; 
    [UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon; 
}else{ 

    UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault]; 
} 

: - Controller1とコントローラ2

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
     UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" 
                    style:UIBarButtonItemStylePlain 
                    target:nil 
                    action:nil]; 
     [self.navigationItem setBackBarButtonItem:backItem]; 
    }else{ 
     //do nothing 
    } 
0

は、次の2つのコントローラを持っていると仮定します。 Controller2はController1からプッシュされます。だから、のviewDidLoadで、

Controller2 *controller2 = [[[Controller2 alloc] init]autorelease]; 
self.navigationItem.hidesBackButton = YES; 

今Controller1からnavigationControllerにコントローラ2をプッシュする前に:メソッドをコントローラ2の、次のスニペット

UIBarButtonItem *backBarButtonItem =[[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(goBackToAllPets:)]autorelease]; 
self.navigationItem.leftBarButtonItem = backBarButtonItem; 

を追加し、backButtonClicked方法では、あなたがチェックにあなたを行うことができますをしたい。