Swift 动态 UIPickerView
Swift Dynamic UIPickerView
我觉得我已经接近了,因为下面的代码适用于静态 UIPickerView,但我正在尝试根据第一个 selection 动态设置我的 pickerview,但我无法全神贯注尽管审查了教程和搜索,但仍然如此。例如,如果您在 myPickerData 中 select“Brown”,只有“Undergraduate”应该显示在 myPickerData2 中,或者如果您 select“Dartmouth”,您应该只显示“Undergraduate”和“MBA”,如果您select “哥伦比亚”或“哈佛”,你得到“本科”,“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 []
我觉得我已经接近了,因为下面的代码适用于静态 UIPickerView,但我正在尝试根据第一个 selection 动态设置我的 pickerview,但我无法全神贯注尽管审查了教程和搜索,但仍然如此。例如,如果您在 myPickerData 中 select“Brown”,只有“Undergraduate”应该显示在 myPickerData2 中,或者如果您 select“Dartmouth”,您应该只显示“Undergraduate”和“MBA”,如果您select “哥伦比亚”或“哈佛”,你得到“本科”,“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 []