在我的应用程序中,我有一系列选择器。每个选择器都从服务中获取其值。
应用布局如下所示:
rectItem = CustGraphicsRectItem(rect, self.drawMode)
您可以点按--------------------
- picker 1 -
--------------------
- add picker -
--------------------
添加更多选择器,这些选择器位于add picker
中。每个选择器都由其UIStackView
支持并具有自己的viewModel,而容器视图控制器也具有viewModel。
点击UIViewController
一段时间后,你会得到类似的结果:
add picker
当您点按每个选择器时,我会向用户显示一组选项。这组选项来自一个Web服务,它由--------------------
- picker 1 -
--------------------
- picker 2 -
--------------------
- picker 3 -
--------------------
中的视图模型包装。
假设服务返回Observable<OperationType>
,option 1
,option 2
,并且用户为第一个选择器选择option 3
,我需要在第二个选择器打开时才提供用户option 1
和option 2
。
在我的主视图模型中,我有这段代码:
option 3
然后,我创建了一个新的 var children = Variable<[ChildViewModel]>([])
var allAvailableOperationTypes: Observable<[OperationType]> {
return RequestManager.sharedInstance.rx
.catalogues()
.asObservable()
.map { return $0.operationTypes }
}
}
来处理Observable
的最后一个值和“删除”已选择的值。
类似的东西:
allAvailableOperationTypes
在View Controller上,我将它绑定到按钮,如:
var availableOperationTypes: Observable<[OperationType]> {
return allAvailablePriceOperationTypes
.map { (operationTypes) in
operationTypes.filter { // keep those not used in children }
}
}
}
如果用户在第一个选择器上选择一个值,然后再添加第二个选择器,则第二个选择器将仅包含“free”选项。但是,第一个选择器仍将显示所有可用选项。
我想要实现的目标是热,这样当用户点击选择器按钮时,它只会显示他可以选择的选项。
答案 0 :(得分:0)
如果我理解正确,您希望UIPickerView显示所有可用选项,直到另一个选项打开,此时先前活动的选择器应折叠到当前选定的值。这意味着您的选择器视图模型应该提供一个Observable,告诉他们当前是否处于活动状态。然后,选择器视图模型应filter
allAvailableOperationTypes
Observable,这是您应该将选择器绑定到的。
这里的要点是,选择器的值也应该绑定到Observable,而不是静态设置。从你的例子来看,目前尚不清楚是否已经如此。