15

私はUINavigationController内のスタックに2 UIViewControllerを持っているとしましょう。 "親"では "[self.navigationController pushViewController:childViewController animated:YES];"と呼びます。いくつかのユーザーの操作と "子"で "[self.navigationController popViewControllerAnimated:YES];"と呼びますユーザーの操作によってiOS:親UIViewController内の子UIViewControllerから戻ってきたことを認識する方法?

親の中で私たちがちょうど戻ってきたことをどうやって認識できますか?

この「popViewControllerAnimated」アクションが子から呼び出されたことを認識できる「イベント」駆動型メソッドはありますか?

答えて

0

最初にthisを読んで、View Controllerで何が起こっているのか理解しやすくなります。

親ビューコントローラにviewWillAppear:viewDidAppear:を実装してメッセージを記録します。

+1

しかし、他のどのコントローラがポップされたかはわかりません。いくつかの異なるものが存在する可能性があります。しかし、プッシュされた状態では一度にではありませんので、OPは最後にプッシュされたコントローラーを簡単に追跡できます。 –

1

これをヒントする方法はいくつかあります。あなたができることは、親からpopViewControllerAnimatedを呼び出すことです。 blockを子コントローラに渡すことにより、そのブロックを実行することができます。これにより、親コントローラによってポップが行われます。

あなたはまたのUIViewControllerが却下されたときに通知されるようにUINavigationControllerデリゲートを使用することができます

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 

このメソッドを使用すると、VCが表示され、現在の(未ポップされたかどうかをチェックすることができますかを知るようになります)VCはあなたが探していた子供です。

また、 - (void)viewWillAppearでトリックを行うこともできますが、これにはいくつかのハッキングが必要な場合があります。

6

この子コントローラをモーダルとして使用しているようですが、「却下」することができます。そのような場合は、UIAlertViewsで使用するAppleのパターンに従ってください。

これが当てはまる場合、私はデリゲートパターンを実装するために次のいずれかの操作を行います(デリゲートとブロックは大きな議論です)ので、オーナー(子供をプッシュするもの)その却下するときを知っている:

  • プロトコル(ChildControllerDelegate)を作成し、その内の1つの方法はchildControllerWasDismissedています(ChildController *)
  • ブロックプロパティを追加します(保持しない、必ずそのコピープロパティを作る)へChildController

あなたはhenは、viewDidDisappearでデリゲートメソッドまたはブロックを呼びたいと思っています。より細かい粒度制御が必要な場合は、viewWillDisappear/viewDidDisAppearに対応するデリゲートメソッドまたはブロックを用意してください。

3

navigationController?.delegate = selfを設定し、このメソッドを実装して、現在のView Controllerがポップアップした後に再び表示されるかどうかを判断することで、これを解決できました。

func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { 
     if viewController == self { 
      // we got back 
     } else { 
      // some other controller was pushed 
     } 
    } 
関連する問題