2017-06-28 11 views
1

私のプロジェクト(プログラムで書かれています)では、いくつかのファイルでナビゲーションバーを隠し、他のファイルではナビゲーションバーの色を変更します。はい、私はいくつかの特定のナビゲーションバーを必要とするすべての単一のファイルにコードを書くだけでこれを行うことができますが、そのバグではなく、正しい方法です。すべてのナビゲーションバーを1つのファイルから制御する方法は?

UINavigationControllerのサブクラスを作成しようとしましたが、そこではすべてのviewControllersをループして特定のファイル内のナビゲーションバーを非表示にしますが、動作しません。

誰でも教えてもらえますか? 1つのファイルからすべてのナビゲーションバーの変更(アクション)を制御する正しい方法は何ですか?

ありがとうございます。

答えて

1

UINavigationViewControllerをサブクラス化して、pushViewControllerメソッドをオーバーライドします。 ViewControllerがプロトコルに準拠している必要があります.ViewControllerがそのプロトコルに準拠している場合はpushViewControllerをチェックし、そうであればプロトコルのメソッドを実装していてUIのレイアウトに基づいているかどうかを確認してください。

例:

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{ 
if ([controller conformsToProtocol:@protocol(MyProtocol)]) { 
    id<MyProtocol> protocolVC = (id)controller; 
    if([protocolVC barColor]){ 
     UIColor *color = [protocolVC barColor]; 
     //Set the bar color 
    } 
} 
[super pushViewController:viewController animated:animated]; 
} 
+1

ハリーは、お返事ありがとうございました。私はあなたが提供したコードのいくつかの行を理解するのに問題があります。説明していただけますか?これはcode-id protocolVC =(id)コントローラです。 if([protocolVC barColor]){ UIColor * color = [protocolVC barColor]; //棒グラフを設定する } – Jonagold

+0

ありがとうございます! – Jonagold

+0

このメソッドがしているのは、 'ViewController'がこのプロトコルの' MyProtocol'に準拠しているかどうかをチェックし、最初のif文がそれであるかどうかを調べることです。これで 'ViewController'が私たちのプロトコルに準拠していることがわかったので、' id protocolVC =(id)controller; 'を使ってプロトコルをキャストすることができます。 'この場合は' barColor'メソッドを呼び出します。プロトコルはオプションのメソッドを持つことができるので、 'ViewController'がこのメソッドを実装しているかどうかをチェックします。成功した場合は色があります。 @ Sergey –

関連する問題