2017-06-17 163 views
0

我有一個簡單的測試項目與UINavigationController作爲我的.rootViewController。 我推動第一個ViewController,它有一個+按鈕作爲右欄按鈕項,我訂閱它的水龍頭以呈現一個新的ViewController(與前一個相同)。 推塞格按我期望的那樣工作。訂閱UINavigationController後退按鈕與RxSwift/RxCocoa

UIKit爲我管理後退按鈕,我認爲這是UINavigationController,使場景背後的魔力。

現在,我需要做的是訂閱後退按鈕,但我找不到如何做到這一點。 我與 1)navigationController.navigationBar.backItem?.backBarButtonItem?.rx.tap 2)navigationController.navigationItem.backBarButtonItem試過嗎?.rx.tap 但他們似乎是零,因此可選鏈接阻止訂閱。

感謝您的幫助,Luca-

+0

爲什麼你需要訂閱後退按鈕?當前視圖控制器將從導航控制器的堆棧中彈出,並且以前的視圖控制器將成爲新的當前視圖控制器。如果你需要這個新的當前視圖控制器在它返回頂部之後做些什麼,那麼你應該把它放在viewWillAppear(animated:)方法中,每當視圖控制器成爲導航控制器中最頂層的視圖控制器時調用該方法或以模態方式呈現。 – NRitH

+0

謝謝NRITH的建議。我正在探索ViewController導航如何與RxSwift/RxCocoa一起使用。我想有一個協調員實例化ViewControllers和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

相關問題