首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在更改数据源内容后更新UIPickerview

如何在更改数据源内容后更新UIPickerview
EN

Stack Overflow用户
提问于 2019-03-18 08:44:13
回答 2查看 1.4K关注 0票数 1

我在iPad模拟器上运行的ios程序中有2个UIPickerViews。它们每个都有一个组件。我通过在标签上使用开关来找到相关的选择器视图。需要通过添加或删除组件来更改这两个单个组件视图。在具有pickerData.append(textInput) pickerData.sort() pickerData.reloadAllComponentspickerData.remove(at: lastDataSelected) picker.reloadAllComponents()的数据源中,这很容易做到,其中lastDataSelected是行整数。

这可以更改数据源,但在传输到UIPickerViews时不能完全更改数据源。直到我滚动视图,UIPickerView显示才会更新。更准确地说,所选项目是正确的,但文本标签没有更新。滚动后,数据标签都正确显示。我尝试通过编程从一端滚动到另一端,但这没有帮助。

那么,我如何告诉程序在用户不滚动视图的情况下更新视图呢?picker.reloadInputViews()没有帮助。

除此之外,项(行)的数量没有改变,以反映选取器数据中的更改,因此在添加新项时,最后一项将从列表中删除。那么第二个问题是如何让UIPickerView函数更新行数?

我还没有找到任何动态更新的选择器视图的例子,所以希望有人能帮助我或给我指出正确的方向。我相信剩下的代码是相当标准的,但我显然在更新过程中遗漏了一些东西。

代码语言:javascript
复制
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在对其数据源和行数进行更改后正确更新。

EN

回答 2

Stack Overflow用户

发布于 2019-03-18 08:46:21

您可以在UIPickerView中使用reloadComponent(_:)方法。

票数 1
EN

Stack Overflow用户

发布于 2021-05-22 14:04:12

有点晚了,但是如果您想要更新一个选取器视图,还有一个方法selectRow。这还具有动画属性的好处,因此您可以为任何更新设置动画。

示例:

代码语言:javascript
复制
for (index, day) in weeklyOptions[0].enumerated() {
    if scheduledTime.contains(day) {
        weeklyDatePicker.selectRow(index, inComponent: 0, animated: true)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55213398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档