更改UIPickerView Swift的数据
我一直在寻找,但我没有找到我的问题的答案。 我的应用程序应该在另一个选择器更改后更改一个选择器的数据 正如你所看到的,在titleForRow方法中,我想设置数据,我也知道这个方法只调用了一次,但我不知道应该在哪里,也不知道该怎么做 我想,在didSelectRow方法上,我也可以设置数据,但在那里我没有一点应该如何设置的线索 这是我的代码,希望对大家有所帮助更改UIPickerView Swift的数据,swift,uipickerview,Swift,Uipickerview,我一直在寻找,但我没有找到我的问题的答案。 我的应用程序应该在另一个选择器更改后更改一个选择器的数据 正如你所看到的,在titleForRow方法中,我想设置数据,我也知道这个方法只调用了一次,但我不知道应该在哪里,也不知道该怎么做 我想,在didSelectRow方法上,我也可以设置数据,但在那里我没有一点应该如何设置的线索 这是我的代码,希望对大家有所帮助 class ViewController: UIViewController, UIPickerViewDelegate, UIPick
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var x = 0
@IBOutlet weak var leaguePicker: UIPickerView!
@IBOutlet weak var clubPicker: UIPickerView!
let league = ["Bundesliga", "Premier League"]
let club = [["ManCity", "Arsenal"],["Bayern", "Dortmund"]]
override func viewDidLoad() {
super.viewDidLoad()
leaguePicker.delegate = self
leaguePicker.dataSource = self
clubPicker.delegate = self
clubPicker.dataSource = self
}
func numberOfComponents(in picker: UIPickerView) -> Int {
return 1
}
func pickerView(_ picker: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
switch (picker){
case leaguePicker:
return league.count
case clubPicker:
return club.count
default:
return 1
}
}
func pickerView(_ picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch (picker){
case leaguePicker:
return league[row]
case clubPicker:
if (x==0){
print("titleForRow call.. x=0")
return club[0][row]
// this is just happening at the beginning
} else {
print("titleForRow call.. x=1")
return club[1][row]
// this does not happen
}
default: return "an error occurred"
}
}
func pickerView(_ picker: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
if (picker == leaguePicker) {
if (row==0){
//clubPicker.selectRow(0, inComponent: 0, animated: true)
x=0
} else {
x=1 // this call is working
//clubPicker.selectRow(0, inComponent: 1, animated: true)
}
}
picker.reloadAllComponents()
//this does not lead to call titleForRow
}
}
当第一个选择器中的值更改时,需要重新加载第二个选择器
func pickerView(_ picker: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
if (picker == leaguePicker) {
x = row
clubPicker.reloadAllComponents()
}
}
您还需要修复numberOfRowsInComponent:
你的标题可以简化:
func pickerView(_ picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch (picker){
case leaguePicker:
return league[row]
case clubPicker:
return club[x][row]
default: return "an error occurred"
}
}
我还建议您将x变量重命名为更有用的变量,例如selectedLeague
func pickerView(_ picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch (picker){
case leaguePicker:
return league[row]
case clubPicker:
return club[x][row]
default: return "an error occurred"
}
}