gpt4 book ai didi

swift - 更改 UIPickerView Swift 的数据

转载 作者:行者123 更新时间:2023-12-02 20:41:13 24 4
gpt4 key购买 nike

我进行了很多搜索,但没有找到我的问题的答案。我的应用程序应该在更改另一个选择器后更改一个选择器的数据。

正如你所看到的,在 titleForRow 方法中,我想设置数据,而且我也知道这个方法只被调用一次,但我只是不知道在哪里以及如何做。

我认为,在 didSelectRow 方法上我也可以设置数据,但我不知道应该如何做。

这是我的代码,希望对您有所帮助。

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, numberOfRowsInComponent component: Int) -> Int 
{
switch (picker){
case leaguePicker:
return league.count
case clubPicker:
return club[x].count
default:
return 1
}
}

并且您的 titleForRow 可以简化:

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

关于swift - 更改 UIPickerView Swift 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com