1

NavigationController セットアップ内に多数の ViewControllers があり、ユーザーが「戻る」をクリックしたときにコードを実行できるかどうか疑問に思っていました。

基本的に、私のアプリはテストを実行します。「戻る」でテストも停止したいと思います。別の停止ボタンを追加できることはわかっていますが、これはよりスムーズになります。

ありがとう

編集:

私が追加しました:

-(void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([[StdTCPTestViewController class] isSubclassOfClass:[ViewController class]])
        NSLog(@"We are going back to VC1");
}

私のコードにはありますが、戻るボタンが押されたときではなく、ビューが読み込まれるとすぐに呼び出されます。以下の例では、StdTCPTestViewController は VC2 で、ViewController は VC1 です。NavController -- VC1 -- VC2 は階層であり、セグエは VC1 から VC2 へのプッシュです。

他の調整はありますか?

4

1 に答える 1

2

Navigation Controller スタックに 2 つの VC があるとします。

  • スタックの一番上にある VC2 (表示されているフロント VC です)
  • スタック上の VC2 の後ろ/下の VC1 (つまり、VC2 を押したときに戻るバック VC です)

VC2 がナビゲーション コントローラー スタックに「プッシュ」されるたびに、VC2 の viewDidLoad が呼び出されます。そして、「ポップ」されるたびに、ビューはアンロードされます。一方、VC1 はまだメモリにロードされているため、スタック上の VC1 は (VC2 がポップされたときに) viewDidload を呼び出しません (VC1 の上に VC2 をプッシュしていたことを思い出してください。したがって、VC1 はメモリに残っている必要があります!)

したがって、ある意味で、戻るボタンが押されたときにコードを実行する場合は、そのコードを VC1 の viewDidAppear (または viewWillAppear) メソッドに配置する必要があります。

ここで、書きたいコードをポップする前に VC2 で実行する必要がある場合は、VC2 で使用できます。

 -(void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
  if ([[viewController class] isSubclassOfClass:[VC1 class]])
  NSLog(@"We are going back to VC1");
}

これは UINavigationController デリゲート メソッドであるため、VC2 は、.h ファイルの @interface 行の末尾に UINavigationControllerDelegate を追加して、そのプロトコルを採用する必要があります。

@interface VC2 : UIViewController <UINavigationControllerDelegate>

また、VC2 を UINavigationController のデリゲートとして設定する必要があるため、VC2 の viewDidLoad を配置する必要があります。

self.navigationController.delegate=self;

上記のデリゲート メソッド コードで参照しているため、明らかに VC1.h ファイルを VC2 にインポートする必要もあります。

お役に立てれば

于 2013-03-11T01:59:38.697 に答える