代码之家  ›  专栏  ›  技术社区  ›  Antonio Lipiz

UIPickerView重新加载不起作用

  •  -1
  • Antonio Lipiz  · 技术社区  · 10 年前

    我有一个选择器视图,其中有两个组件,每个组件中有五行。

    在第一部分中,我有五种品牌的汽车:丰田、福特、本田等。在第二部分中,有五种相关品牌的汽车。

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

    我的问题是,我似乎无法根据1更新组件2。

    以下是代码的快照,以及我目前在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";
        }
    
    
    
    }
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   vacawama    10 年前

    当用户从组件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辆。