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