我将按钮绑定到路由器中的PublishSubject
,如下所示:
hambugerButton
.rx_tap
.bindTo(router.openMenu)
.addDisposableTo(disposeBag)
在我的路由器中:
let openMenu = PublishSubject<Void>()
//...
openMenu
.map { _ in
menuNavigationController
}
.bindTo(mainNavigationController.rx_present())
.addDisposableTo(disposeBag)
但是,当控制器被解除分配时,按钮正在发送“完整”信号。当PublishSubject
收到它时,它不会对来自另一个控制器的信号作出反应(这是可以理解的:它是Observable
保证)。
我提出的唯一解决方案:
hambugerButton
.rx_tap
.subscribeNext {
self.router.openMenu.onNext()
}
.addDisposableTo(disposeBag)
看起来很丑陋,有点破坏了反应界面的想法。
我的问题是,有没有办法避免Completed
事件传播到PublishSubject
?我可以制作一些忽略此类事件的Observer
吗?
答案 0 :(得分:0)
如果正在释放拥有hamburgerButton
的视图控制器,因此hamburgerButton
也被取消分配,为什么不希望对router.openMenu
的绑定也被解除分配? ?也许不清楚你的视图控制器层次结构来自你的问题。
另外,在第一个代码段中,如果不将其添加到DisposeBag
,则不应该进行绑定:
hambugerButton
.rx_tap
.bindTo(router.openMenu)
.addDisposableTo(disposeBag)