2012-05-08 10 views
6

ナビゲーションコントローラのタイトルバーを背景画像でカスタマイズしましたが、バックボタンの背景色を透明に変更してその下の緑のタイトルバー。私はiOS開発にかなり新しいです。誰でも何ができるのかを示唆することはできますか?ios 5ナビゲーションコントローラの戻るボタンの背景を透明に変更します

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 

} 

EDIT:研究のビットを行った後、私は私が欲しかったものを手に入れるために管理をここで

は、私はそれが役立ちます念のために、ナビゲーションコントローラのタイトルバーを変更するために使用するコードです。戻るボタンの背景画像を変更するコードを次に示します:

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

上記のコードは、画像をナビゲーションコントローラのすべてのバックボタンに追加します。

+0

ナビゲーションコントローラがポップオーバーコントローラに表示されている場合、ソリューションは機能しません。その理由は、ナビゲーションバーの背景とバックバーのボタンアイテムの背景がポップオーバーで異なるように描画されるためです。 –

答えて

5

デフォルトの戻るボタンの外観を変更することはできませんが、独自のボタンを作成して置き換えることはできます。

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 
    if(self.navigationController.viewControllers.count > 1) { 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
     [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
     backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f); 
     UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

     self.navigationItem.leftBarButtonItem = backButtonItem; 
    } 
} 



- (void) didTapBackButton:(id)sender { 
    if(self.navigationController.viewControllers.count > 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

答えに感謝します!それは機能していますが、1つのレベルの深さであり、すべてのビューではありません。しかし、そこに他の方法はありませんか?ありがとう! –

+3

私が知っている他の方法はありません。これをすべてのView Controllerに含める場合は、 'viewDidLoad'メソッドでこれを実装する' BaseViewController'クラスを作成し、それをアプリケーションのすべてのView Controllerの基本クラスとして使用します。メインビューコントローラのviewDidLoadをオーバーライドして '[super viewDidLoad]'を呼び出すときは、注意が必要です。 – adig

+0

ありがとうadig!その役に立つ! –