2016-09-29 5 views
0

アプリ内の特定のビューコントローラにアクセスするためにユーザーが取ることのできるパスは異なります。
現在のView Controllerにアクセスするためにユーザーが使用した正確なパスを知りたい。

どのような提案も高く評価されます。iOSの現在のビューコントローラの前にすべてのビューコントローラを見つける方法は?

+1

シングルトンクラスでViewControllersのスタックを維持することができます。 –

答えて

0

現在のビューコントローラのviewDidAppear(),viewWillAppear()またはviewDidLoad()メソッドでは、次のコードを使用します。私はそれを私のviewDidLoad()メソッドを使用している。

for (int i=0;i<[self.navigationController.viewControllers count];i++) 
{ 
    NSLog(@"%d>>>>>>>>>%@",[self.navigationController.viewControllers objectAtIndex:i]); 
} 
+0

これは唯一の問題です:あなたはそれを追跡することはできません、それはコンソールの単なるロガーです。 – prabodhprakash

+0

ユーザが経験したビューをチェックするだけで、階層内のビューコントローラを使っている場合はラベルを表示するだけです。 –

+0

の場合は、ユーザーが現在のビューコントローラを経由してきたかどうかを確認するグローバルビットまたはローカルビットを追加することができます –

2

私のプロジェクトで同様の問題が発生し、ViewControllersのスタックを保持するシングルトンクラスを作成しました。各ViewControllerはスタックからのプッシュとポップを担当します。したがって、ユーザが追跡したフローを持っていたいときはいつでもスタックに問い合わせました。

とてもうまく機能しました。

2

あなたはそれを比較することで、あなたのコントローラを確認することができ、「XYZViewController」のではなく、ご希望のクラスを入れ

for (UIViewController * aController in self.navigationController.viewControllers) 
    { 
     if (aController isKindOfClass:[XYZViewController class]) 
     { 
      //You can do your work here 
     } 
    } 
+0

まあ、私はすべての状況で使用できる一般的なアプローチを探していました。 –

+1

AppDelegateで変数を設定し、それを使って目的の1つのクラスを比較することができます –

+0

@MdIbrahimHassanこのソリューションに何が問題なのですか?あなたはこれを受け入れるべきです。 –

1

あなたはViewControllerをの前にあるかを知ることを得るために、このようにナビゲーションスタックを使用することができます特定のViewコントローラに到達します。ここで

がコードです:

for (UIViewController *vc in self.navigationController.viewControllers) { 
    NSLog(@"vc desc : %@", vc.description); 
} 

しかし、あなたは、ユーザーが特定のVCから来て、他のViewControllerからVCに来たときにラベルを表示しない場合は、ラベルを表示したい場合は、その後、ラベルを表示する必要があるViewControllerのブール値を使用し、ブール値をYESとして設定し、以前のVCからプッシュしてブール値をチェックしてラベルを表示します。

関連する問題