2016-11-15 7 views
0

このApple Docは有望に見えますが、https://developer.apple.com/reference/uikit/uinavigationcontrollerdelegate?language=objcが呼び出されていません。NavigationControllerサブクラスがVCをプッシュしてポップしたかどうかを確認するにはどうすればいいですか?

私はUINavigationControllerを継承するCustomNavigationControllerを持っています。 VCが私のCustomNavCからプッシュまたはポップされたことを知る必要があります。

私はUINavigationControllerDelegateに準拠することができますが、これはViewControllersの方が多いようです。 CustomNavCがself.delegate = selfを実行するためのものではありません。

これはどのように達成できますか?

更新:誤ったアラーム。申し訳ありません。デバイスでテストしていて、OS_ACTIVITY_MODEを無効にしました。 UINavigationControllerDelegate関数は正常に動作します。

+0

あなたはいくつのナビゲーションコントローラサブカスを持っていますか?唯一のものがあれば、配列であるオブザーバをナビゲーションスタックに追加することができます(viewControllersプロパティ)。それが変更されたときに通知を投稿してください! –

答えて

1

1つのオプションは、pushViewControllerpopViewControllerメソッドをオーバーライドすることです。

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    [super pushViewController:viewController animated:animated]; 

    // Handle push as needed 
} 

あなたにも上書きすることができ、いくつかのpop...の方法があります。

スタック全体が置き換えられたときに呼び出されるsetViewControllers:animated:メソッドをオーバーライドすることもできます。

これらのメソッドをオーバーライドすると、他のクラスでデリゲートを自由に使用できます。

+0

UINavigationControllerのviewControllersにobserverを追加して、変更したらそれを観察できますか? –

+0

@TejaNandamuriおそらく。私はそれをやろうとはしたことがないので、私は確かに言うことができません。 – rmaddy

+0

さて、ここで私のコメントを更新しようと思います! –

0

たぶん、あなたはあなたのCustomNavigationControllerUINavigationControllerDelegateを実装し、これらの機能を追加することができます。

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { 

    } 

func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { 

    } 
+0

質問にはSwiftではなくObjective-Cとタグ付けされています。 – rmaddy

+0

これは私が試した最初のものでしたが、これらの関数は決して呼び出されません。 –

+0

Obj-Cにも存在します。 –

関連する問題