3

タブ内にナビゲーションコントローラがあり、その中にコントローラを表示するタブ付きアプリケーションがあります。それらのすべては同じナビゲーションコントローラナビゲーションバーを使用します:戻るボタン+ロゴ画像。現在、私はすべてのビューコントローラでこのコードを配置することだ:すべてのナビゲーションコントローラとビューコントローラにカスタムナビゲーションバー(title + titleView)を設定するにはどうすればよいですか?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationItem.title = @"Back"; 
    UIImage *headerImage = [UIImage imageNamed:@"Logo.png"]; 
    self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:headerImage] autorelease]; 
} 

は私見それはそれを行うための最善の方法ではありません。私はUIViewControllerのカテゴリを使用し、viewDidLoadメソッドをオーバーライドすることを考えていますが、すべてのView ControllerはviewDidLoadで実行するいくつかの追加コードを持っていますので、オーバーライドはソリューションではないと思います。他の方法は何ですか?

+0

iOS 5をターゲットに設定していますか? iOSでは、これらの値をグローバルに設定できます(appDelegateなど)。 –

+0

現在、nop :)しかし、私はiOS 5でこれを行う方法を教えてください... – Centurion

+1

UIAppearanceを見てください:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol /Reference/Reference.html私は答えとして少しの例を書いた。それがあなたのために働くかどうか私に教えてください。 –

答えて

7

UIViewControllerMyViewControllerWithBackButtonAndLogoのサブクラスを作成できます(より適切な名前を指定できます)。viewDidLoadを実装してナビゲーション項目を設定します。すべてのView Controllerをこの基本クラスから継承させる次に、ビューコントローラが独自の実装で[super viewDidLoad]を呼び出すことを確認します。

また、戻るボタンのタイトルを設定するには、ナビゲーション項目のtitleプロパティを変更しないでくださいが、適切なbackBarButtonItemを設定してください。

+0

これは本当にスマートな答えです - 私はそれを考えていたらいいと思っています。全体的には、これは単なる回避策だとは思いますが、ハッキーなものではありません。私が個人的にやってみたいのは、これらのカスタマイズを特定のナビゲーションコントローラに関連付けることで、そのスタック内のすべてのビューに追加ができるようにすることです。私はそれがnavコントローラの責任の範囲内に入るように感じますが、私はそのクラスをあまりにもよく理解できないかもしれません...とにかく、これに感謝! – SilithCrowe

+0

UITableViewControllerとUIViewControllerの両方のサブクラスで同じviewDidLoadメソッドを実装することは可能ですか?したがって、すべてのコントローラ(ビューとテーブル)は同じナビゲーションバーを持ちます。 – JastinBall

関連する問題