我在iPad模拟器上运行的ios程序中有2个UIPickerViews。
它们每个都有一个组成部分。
我可以通过使用标签上的开关找到相关的选择器视图。需要通过添加或删除组件来更改两个单个组件视图。
这在数据源中很容易
pickerData.append(textInput)
pickerData.sort()
pickerData.reloadAllComponents
和
pickerData.remove(at: lastDataSelected)
picker.reloadAllComponents()
其中lastDataSelected是行整数。
这可以更改数据源,但在传输到UIPickerViews时不能完全更改。 在滚动视图之前,不会更新UIPickerView的显示。更准确地说,所选项目是正确的,但文本标签未更新。滚动后,所有数据标签均正确显示。 我试图以编程方式从一端滚动到另一端,但这无济于事。
那么,如何在用户不滚动的情况下告诉程序更新视图? picker.reloadInputViews()没有帮助。
除此之外,项目(行)的数量未更改以反映选择器数据中的更改,因此添加新项目时,最后一项不在列表中。 那么第二个问题是如何获取UIPickerView函数来更新行数?
我无法找到动态更新的选择器视图的任何示例,因此希望有人可以帮助或指出正确的方向。 我相信其余的代码是相当标准的,但显然在更新过程中缺少某些内容。
override func viewDidLoad() {
super.viewDidLoad()
flvPicker = UIPickerView()
flvPicker.delegate = self
flvPicker.dataSource = self
flvPicker.tag = 0
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
switch pickerView.tag {
case 0:
return 1
case 1:
etc...
}
}
var numberOfRowsInComponent = 0
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
switch pickerView.tag {
case 0:
return flvPickerData.count
case 1:
etc...
}
}
func pickerView(_
pickerView: UIPickerView,
titleForRow row: Int, forComponent component: Int) -> String? {
switch pickerView.tag {
case 0:
return flvPickerData[row]
case 1:
etc...
}
}
func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch pickerView.tag {
case 0:
flavourSelected = flvPickerData[row]
lastFlavourSelected = row
case 1: etc...
}
}
我认为问题实际上是在更改数据源和行数后如何使UIPickerView正确更新。
答案 0 :(得分:0)
您可以使用reloadComponent(_:)
中的UIPickerView
方法。