2017-06-17 127 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

相关问题