1

私はUINavigationControllerクラスをバックグラウンドイメージ、ナビゲーションバーサイズ、戻るボタン、太字フォントなどの項目を変更するためにサブクラス化しようとしています。 時間のカップルや読書の多くの後、私は、私はUINavigationControllerクラスをサブクラス化しないことを理解している...すべての画面でNavigationController用のカスタム戻るボタン

私は特定の設計を持っているし、私のカスタムNavigationControllerを使用するすべての画面にそのデザインを転送したいと思います..

これまでのところ、私はこれについて洗練された解決策を見いだすことはできませんでしたが、ほとんどのソリューションは次の画面にのみ表示するための設定(次のビュー)に基づいています。

どうすればこの問題を解決できますか?たぶんカテゴリを使用していますか? ありがとうございます。

+0

いくつの 'UINavigationController'インスタンスがありますか? –

+0

インスタンスは1つのみです。 – CSharpLearning

+0

それでは、なぜ複雑な戦略に悩まされるのですか? –

答えて

7

カスタム左ボタンボタンのコードをUINavigationcontrollerと表示しています。あなたは

leftButton = [UIButton buttonWithType:UIButtonTypeCustom];  
    [leftButton setImage:[UIImage imageNamed:@"Yourcutomeimage.png"] forState:UIControlStateNormal];  
    leftButton.frame = CGRectMake(0, 0, 30, 30); 
    [leftButton addTarget:self action:@selector(youraction:) forControlEvents:UIControlEventTouchUpInside]; 

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:leftButton]autorelease]; 

//または

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:leftButton]autorelease]; 

希望

各ビューコントローラで、ボタン(左右)の両方のために、このコードを追加することができ、これは

+0

私が試みているのは、各View Controllerでの設定を避けることです。私はそれを1つの場所でのみ定義し、どこにでも変更を伝播させたいと考えています。 – CSharpLearning

+0

OKよりもUIViewControllerBaseクラスを作成して、どこでも使えます。しかし、最終行で上記のコードを使用してナビゲーションボタンをカスタマイズすることができます。 – Nit

+0

あなたの助けてくれてありがとう、私は今何をしようとしています。独自の左ボタンを宣言するときに、戻るボタンのデフォルトセレクターを使用する方法はありますか?私は余分なメソッドを追加することを避けたいと思います。もう1つの質問は、私がUIBarButtonItemを使用するとボタンの太さを設定できないということです。 – CSharpLearning

1

はい@Nit ..あなたを助けますそうです、これはUINavigationControllerをカスタマイズする方法ですが、UIViewControllerごとにそれを実行したくない場合は、UIViewControllerのサブクラスである​​クラスを作成し、viewDidLoadメソッドですべての@ Nitが記述した方法でボタンをクリックし、UIViewControllerを​​クラスのサブクラスにする必要があります。

+0

それは確かに良いアイデアです。私はどこにでもスパゲッティコードを持っているようにしていました。ありがとう。 – CSharpLearning

0

uinavigationcontrollerにカスタム戻るボタンを追加する場合は、navigationItem.backBarButtonItemを使用し、uinavigationcontrollerを初期化するクラスに実装する必要があります。 サンプル: -

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btnImage.png" style:UIBarButtonItemStyleBordered target:youtarget action:@sel(your action)]; 
self.navigationItem.backBarButtonItem = backButton; [backButton release]; 
+0

UINavigationControllerがストーリーボードで初期化されるとどうなりますか? (最初のビューコントローラ)? – CSharpLearning

0

私はこの答えに私の解決策を概説している:https://stackoverflow.com/a/16831482/171933

基本的に、あなたはのUIViewControllerのカテゴリを作成し、あなたのビューコントローラのすべてのviewWillAppear方法の1つのメソッドを呼び出します。

関連する問題