我无法从 swift 中的嵌入视图控制器订阅发布主题



我有包含ContainerView的MainViewController。 和 ContainerView 具有嵌入式 segue,指示 ThirdViewController

在 ThirdViewController 中,我创建了 PublishSubject,如果我在 PickerView 中选择某些内容,则将值发送到 PublishSubject。 在此处输入图像描述

然后 MainViewController 从 ThirdViewController 订阅 PublishSubject。

所以如果这个成功,在MainView控制器中,我将从PickerView获得价值。

但我的问题是我什么都得不到,甚至可能无法订阅。

问题是什么???我能做什么???

主视图控制器

if  let thirdVC = self.storyboard?.instantiateViewController(withIdentifier:"ThirdViewController") as? ThirdViewController {
print("third segue success")
thirdVC.selectFeelingSubject.subscribe(onNext : {
print($0)
}).disposed(by: self.disposeBag)

第三视图控制器

var selectFeelingSubject = PublishSubject<String>()

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectFeelingSubject.onNext(feelingArray[row])
}

代码:

if  let thirdVC = self.storyboard?.instantiateViewController(withIdentifier:"ThirdViewController") as? ThirdViewController {
print("third segue success")
thirdVC.selectFeelingSubject.subscribe(onNext : {
print($0)
})
.disposed(by: self.disposeBag)

没有为您提供主视图控制器中的视图控制器。它正在实例化一个全新的视图控制器。

您需要主视图控制器中的实际视图。试试这个:

let thirdVC = self.children[0] as! ThirdViewController
thirdVC.selectFeelingSubject.subscribe(onNext : {
print($0)
})
.disposed(by: self.disposeBag)

如果您有多个子视图控制器,则需要将0更改为适当的数字,以便获得正确的子视图控制器。

最新更新