У меня есть 2 UIPickerViews в программе ios, которую я запускаю на симуляторе iPad.
У них есть один компонент в каждом.
Я нахожу соответствующий вид выбора, используя переключатель на теге. Два отдельных компонента должны быть изменены путем добавления или удаления компонентов.
Это достаточно просто в источнике данных с
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 корректно обновляться после внесения изменений в его источник данных и, следовательно, в число строк.