Swift 动态 UIPickerView

标签 swift dynamic components uipickerview

我觉得我已经很接近了,因为下面的代码适用于静态 UIPickerViews,但我正在尝试根据第一个选择动态设置我的 pickerview,尽管查看了教程和搜索,但我无法全神贯注于这一点。例如,如果您在 myPickerData 中选择“Brown”,则 myPickerData2 中仅应显示“本科生”,或者如果您选择“达特茅斯”,则仅应显示“本科生”和“MBA”,如果您选择“哥伦比亚”或“哈佛”,则应仅显示“本科生”和“MBA”。 ,你会得到“本科”、“JD”、“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"]]

然后

myPickerData2 = mainDic[myPickerData[row]]!

pickerView.reloadComponent(1)

并在组件 0 中使用它

myPickerData = Array(mainDic.keys)

将数据源设置为 mainDic 并将键处理为 myPickerData 并将当前选定键的值处理为 myPickerData2

编辑:viewDidLoad

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

关于Swift 动态 UIPickerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52264040/

相关文章:

ios - 连接到 Wi-Fi 网络时,获取其所有接入点

ios - 在 Swift xCode 中将 UI 导航栏设置为半透明

ios - 如何将在 Collection View 中选择的所有单元格列出到另一个 View 中

SwiftUI 我想使用 simultaneousGesture 但也想使用孤立的手势

sqlalchemy/postgres : parameterizing column names in queries at run time?

layout - Vaadin - 迭代布局中的组件

javascript - 在我的 html 代码中创建动态 id

components - 组件和 bower 有什么区别?

android - Material 组件 TextInputEditText 底线边距

javascript - 如何删除呈现的 HTML 中多余的包装元素?