2017-06-17 24 views
0

私は、私の.rootViewControllerとしてUINavigationControllerを持った簡単なテストプロジェクトを持っています。 私は最初のViewControllerを+ボタンを右のボタンの項目として押します。私は新しいViewController(前のものと同じです)を表示するためにそのタップを購読します。 プッシュセグは私の期待通りに機能します。RxSwift/RxCocoaでUINavigationControllerの戻るボタンを購読します

UIKitは私のために戻るボタンを管理しています。私はそれがシーンの背後にある魔法を作るUINavigationControllerだと思います。

ここで、私はバックボタンを購読する必要がありますが、これを行う方法が見つかりません。 私は を.rx.tap?.backBarButtonItem?.rx.tap 2)navigationController.navigationItem.backBarButtonItem 1)navigationController.navigationBar.backItemで試してみましたが、彼らがnilであるように見えるので、オプションのチェーンは、サブスクリプションを防ぐことができます。あなたの助けのための

おかげで、Luca-

+0

なぜ戻るボタンを購読する必要がありますか?現在のビューコントローラがナビゲーションコントローラのスタックからポップされ、以前のビューコントローラが新しい現在のビューコントローラになります。新しい現在のView Controllerが何かを行う必要がある場合は、そのコードを 'viewWillAppear(animated:)'メソッドに置く必要があります。このメソッドは、View ControllerがNavコントローラ上で最も上になるたびに呼び出されますまたはモーダルで表示されます。 – NRitH

+0

NRitHありがとうございます。 ViewControllerのナビゲーションがRxSwift/RxCocoaでどのように機能するかを調べています。私は、ViewControllerとViewModelsをインスタンス化するコーディネーターを持っていたいと思います。私は、これらのコーディネータオブジェクトによってナビゲーションを調整し、ユーザがいつ戻るボタンをタップするかを知る必要があると考えています。とにかく、これは私の心ではかなり混乱していますが、viewController.rx.sentMessage(#selector(UIViewController.viewWillDisappear(_ :)))はあなたの提案どおりに動作します。 – Luca

答えて

1

私はここにあなたの最善の策は、UINavigationControllerの演算子を使用することだと思います。

navigationController.rx.willShowは、ビューコントローラが表示される直前にトリガされます。火事が発生したときは、最後の一掃をすることができます。

+0

UINavigationControllerはrx.willShowの観測可能性を持たないようです。何か不足していますか? #セレクタを使用する必要がありますか? – Luca

+0

RxCocoaの最新バージョンにアップグレードする必要があるかもしれませんか?それはそこにあります(https://github.com/ReactiveX/RxSwift/blob/master/RxCocoa/iOS/UINavigationController%2BRx.swift) –

+0

ありがとう、私は3.4にいた – Luca

関連する問題