Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 快速动态UIPickerView_Swift_Dynamic_Components_Uipickerview - Fatal编程技术网

Swift 快速动态UIPickerView

Swift 快速动态UIPickerView,swift,dynamic,components,uipickerview,Swift,Dynamic,Components,Uipickerview,我觉得我很接近了,因为下面的代码适用于静态UIPickerView,但我正在尝试根据第一个选择动态设置我的pickerview,尽管查看了教程并进行了搜索,我还是无法完全理解这一点。例如,如果您在myPickerData中选择“Brown”,则myPickerData中仅显示“本科生”,或者如果您选择“Dartmouth”,则您应仅获得“本科生”和“MBA”,最后,如果您选择“Columbia”或“Harvard”,则您将获得“本科生”、“法学博士”、“MBA” var myPickerData

我觉得我很接近了,因为下面的代码适用于静态UIPickerView,但我正在尝试根据第一个选择动态设置我的pickerview,尽管查看了教程并进行了搜索,我还是无法完全理解这一点。例如,如果您在myPickerData中选择“Brown”,则myPickerData中仅显示“本科生”,或者如果您选择“Dartmouth”,则您应仅获得“本科生”和“MBA”,最后,如果您选择“Columbia”或“Harvard”,则您将获得“本科生”、“法学博士”、“MBA”

var myPickerData = ["Select Your Dream College", “Brown", "Columbia", “Dartmouth”,  "Harvard" ]

var myPickerData2 = ["Undergraduate", "JD", "MBA"]

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 2
}

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

    if component == 0 {
        return myPickerData.count
    }

    return myPickerData2.count
}

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

    if component == 0 {
        return myPickerData[row] as String
    }
    return myPickerData2[row] as String
}

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

    uniSelected = myPickerData[pickerView.selectedRow(inComponent: 0)]

    collegeSelected = myPickerData2[pickerView.selectedRow(inComponent: 1)]
}
你可以试试

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

     if component == 0 {

         let str = myPickerData[row]

         if str == "Brown" {

            myPickerData2 = ["Undergraduate"]
         }
         else if str == "Dartmouth" {

            myPickerData2 = ["Undergraduate", "MBA"]
         }
         else {

            myPickerData2 = ["Undergraduate", "JD", "MBA"]

         }

         pickerView.reloadComponent(1)

      }
      else {

         uniSelected = myPickerData[pickerView.selectedRow(inComponent: 0)]

         collegeSelected = myPickerData2[pickerView.selectedRow(inComponent: 1)]
      }

}
//

这可能包含重复项,但您可以尝试

let mainDic:[String:[String]] = ["Select Your Dream College":[],
                 "Brown":["Undergraduate"],
                 "Dartmouth":["Undergraduate", "MBA"],
                 "Columbia":  ["Undergraduate", "JD", "MBA"],
                 "Harvard",["Undergraduate", "JD", "MBA"]]
然后

并在组件0中使用它

myPickerData = Array(mainDic.keys)
将您的数据源设置为
mainDic
,并将键处理为
myPickerData
,当前选择的键值处理为
myPickerData 2

编辑:
viewDidLoad

myPickerData = Array(mainDic.keys)
myPickerData2 = mainDic["Select Your Dream College"]! // it's default or simply []

这是非常有帮助的,而且我认为这将是一个解决问题的方法。但是,是否有一种更干净/可扩展的方法来做到这一点?我只为每个数据源数组列出了3个,并设想一个更大的数组将成为一个巨大的if语句。也就是说,如果我在myPickerData1中加载15个可能的选择,那么if-else语句将变得非常混乱。好的,dict数组是有意义的,但是我原来的func方法有什么变化?尝试可视化我的原始代码将如何更改。又来了!mainDic的init myPickerData和myPickerData 2,,,参见edit试图用字典实现您的建议,遇到了很多问题,所以只使用原始if语句haaa
myPickerData = Array(mainDic.keys)
myPickerData2 = mainDic["Select Your Dream College"]! // it's default or simply []