Swift Dynamic UIPickerView - PullRequest
       19

Swift Dynamic UIPickerView

0 голосов
/ 10 сентября 2018

Я чувствую, что я близок, потому что приведенный ниже код работает для статических UIPickerViews, но я пытаюсь динамически настроить мое окно выбора, основываясь на первом выборе, и я не могу обдумать это, несмотря на просмотр учебников и поиск. Например, если вы выберете «Коричневый» в myPickerData, то только «Бакалавриат» должен отображаться в myPickerData2 или если вы выберете «Дартмут», вы должны получить только «Бакалавриат» и «МВА» и, наконец, если вы выберете «Колумбия» или «Гарвард» Вы получаете «Бакалавриат», «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)]
}

1 Ответ

0 голосов
/ 10 сентября 2018

Вы можете попробовать

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 []
...