15

UINavigationController内のスタックに2つのUIViewControllerがあるとします。「親」では、「[self.navigationController pushViewController:childViewControlleranimated:YES];」と呼びます。いくつかのユーザーアクションと「子」で、「[self.navigationController popViewControllerAnimated:YES];」を呼び出します。いくつかのユーザーアクションに応じて。

親の中で、戻ってきたばかりであることをどのように認識できますか?

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

4

4 に答える 4

6

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

その場合、デリゲート パターンを実装するために次のいずれかを実行します (デリゲートとブロックは大きな議論であり、ここでは説明しません)。解雇:

  • プロトコル (ChildControllerDelegate) を作成し、1 つのメソッドを含めます childControllerWasDismissed:(ChildController *)
  • ChildControllerにブロックプロパティを追加します(保持ではなくコピープロパティであることを確認してください)

次に、viewDidDisappear でデリゲート メソッドまたはブロックを呼び出します。より細かい制御が必要な場合は、viewWillDisappear / viewDidDisappear に対応するデリゲート メソッドまたはブロックを用意します。

于 2011-08-02T14:28:39.097 に答える
4

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
        }
    }
于 2016-04-06T07:05:45.490 に答える
1

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

UINavigationController デリゲートを使用して、UIViewController が閉じられるときに通知を受けることもできます。

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

このメソッドは、どの VC が表示されるかを知らせ、現在の (まだポップされていない) VC が探していた子であるかどうかを確認できます。

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

于 2011-08-02T14:02:32.197 に答える
0

最初にこれを読んでください。View Controller で何が起こっているのかを理解するのに役立ちます。

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

于 2011-08-02T14:01:12.207 に答える