UIPickerView 重新加载不起作用



>我有一个选取器视图,其中包含两个组件,每个组件中有五行。

在第一个组件中,我有五个品牌的汽车:丰田、福特、本田等...... 在第二个组件中,我有五个相关品牌的模型。

当您更改品牌时,模型应随之更新。

遇到的问题是我似乎无法让组件 2 根据 1 进行更新。

以下是代码的快照以及我迄今为止在sim上所拥有的内容。

var keyArray: [String] = ["Nissan","Honda","Toyota","Ferrari","Bentley"]
var makeIndex = 0
var carDict : [String :[String]] = ["Nissan" : ["Sentra","Xterra","Versa","Altima","Maxima"], "Honda": ["Accord","Civic","Odyssey","Civic SE", "Accord LE"],"Toyota":["Corolla","Camry","4 Runner","Corolla LE","Camry SE"],"Ferrari": ["La Ferrari", "Modena", "Testarrosa","360 Spyder", "California"], "Bentley": ["Arnage","Continental","Flying Spur","Continental GT"]]
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return 5
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 2
}
@IBOutlet weak var pickerLabel: UILabel!
@IBOutlet weak var speedLabel: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    speedLabel.text = String(vehicleInst.speed)
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    switch component {
    case 0:
        if component == 0 {
            pickerView.reloadComponent(1)
            return keyArray[row]
        }
        return keyArray[row];

    case 1:

        var modelarray = carDict[keyArray[makeIndex]]
return modelarray![row];
    default:
        return "nothing";
    }

}

当用户从组件 0 中选择品牌时,您需要更新组件 1。实现pickerView:didSelectRow:inComponent:,然后在那里更新makeIndex

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if component == 0 {
        makeIndex = row
        pickerView.reloadComponent(1)
    }
}

以下是对pickerView:titleForRow:forComponent:的相应更改

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    switch component {
    case 0:
        return keyArray[row]
    case 1:
        var modelarray = carDict[keyArray[makeIndex]]
        return modelarray![row]
    default:
        return "nothing"
    }
}

顺便说一下,您只有 4 款宾利车型,这会导致崩溃,因为您声称自己有 5 辆。

最新更新