如何设置选择器视图以显示来自多个矩阵选项的数据?

Posted

技术标签:

【中文标题】如何设置选择器视图以显示来自多个矩阵选项的数据?【英文标题】:How do I set up a picker view to display data from several matrix options? 【发布时间】:2017-07-20 00:38:31 【问题描述】:

我在视图控制器中有 4 个文本字段,它们将使用单个 PickerView,但会根据哪个文本字段处于活动状态(通过编辑开始操作)进行更新。我可以从单个测试数组加载数据,但无法找到让选择器视图在几个预先加载了从 Parse 查询的数据的数组之间切换的方法。

另外,有没有办法从字符串中引用数组名?例如:用 didSelectRow 函数中的变量替换“testArray”,并在文本字段变为活动状态时设置变量。

谢谢!

func numberOfComponents(in pickerView: UIPickerView) -> Int 
    return 1


func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 

    if activeField == 1 

        return fieldNameArray[row]

     else if activeField == 2 

        return taskCategoryArray[row]

     else if activeField == 3 

        return assignedPersonArray[row]

     else if activeField == 4 

        return machineUsedArray[row]
    


    //return testArray[row]



func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 

    if activeField == 1 

        return fieldNameArray.count

     else if activeField == 2 

        return taskCategoryArray.count

     else if activeField == 3 

        return assignedPersonArray.count

     else if activeField == 4 

        return machineUsedArray.count
    


    //return testArray.count



func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 

    if activeField == 1 

        fieldNameTextField.text = testArray[row]

     else if activeField == 2 

        taskCategoryTextField.text = testArray[row]

     else if activeField == 3 

        assignedPersonTextField.text = testArray[row]

     else if activeField == 4 

        machineryUsedTextField.text = testArray[row]
    

    pickerView.isHidden = true

【问题讨论】:

【参考方案1】:

我不明白你问题的第二部分。

但是对于第一部分,你几乎就在那里,你只需要在你的一个文本视图变为活动状态时重新加载选择器视图:

pickerView.reloadAllComponents()

【讨论】:

嗯,这绝对是有道理的,假设我将它添加到文本字段操作函数,对吧?对于第二部分,我正在寻找一种方法来在语句中设置一个变量,告诉选择器视图从哪个数组中提取数据,以便源数据可以根据所选的文本字段进行更改。例如:而不是使用由 activeField 变量确定的 if 语句和案例,我可以将 titleForRow 的单行写为“return matrixVariable”,然后在每个“did start editing”函数中都有一行将 matrixVariable 设置为要从中提取标题的数组的名称。 您可以创建一个变量,如“var selectedArray : Array!”并将其分配到文本字段操作函数中,例如“selectedArray = fieldNameArray”。然后您可以删除所有 if else 检查并简单地返回 selectedArray 包含的内容“selectedArray [row]”(当然假设所有数组具有相同的结构。唯一需要注意的是分配这个“selectedArray”var在你的 viewDidLoad 上有东西,否则它会崩溃(因为它被解开) 如果你不想使用这么多的 if else 语句,只需做一件事,放置一个鸡文本字段,哪个字段是活动的,然后将该字段数组传递给 PickerArray 并使用这个单一的选择器数组对于所有文本字段只需增加一个数组,它将用于选择器,PickerArray 中的数据来自活动文本字段数组,当新文本字段变为活动时不要忘记重新加载选择器将缩短您的代码及其负载超过 25 行 谢谢大家!不得不进行一些挖掘,结果发现最后一条错误消息可以通过将 selectedArray 使用的任何数组声明为包含字符串( var selectedArray : Array!)来解决,在这样做之后它似乎运行良好。非常感谢!

以上是关于如何设置选择器视图以显示来自多个矩阵选项的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap multiselect单选按钮选择了多个选项

选择器视图选项填充标签

Django:如何根据表单中的选定选项在模板上显示来自 django 数据库的图像?

iOS 7 - 如何在表格视图中显示日期选择器?

如何将来自多个视图控制器的数据保存到单个核心数据实体中

checkbox多选按钮如何取值?