UIPickerView 选择数组 Swift

UIPickerView selection array Swift

目前,我的代码可以正常工作,但我遇到的问题是 UIPickerView。现在,如果我 select Cameron 品牌,它会转到 var Cameron 但如果我 select Shaffer 品牌,它仍然会转到 var Cameron。

我如何重写代码,以便当我选择不同的品牌时,它 select 一个不同的数组?

例如,如果我 select 品牌 cameron,它 select cameron,如果我 select 品牌 Shaffer,它选择 shaffer 等

class Picker: UIViewController, UIPickerViewDelegate, UITextFieldDelegate

{
    var activeTextField:UITextField?

    @IBOutlet var pickerView1: UIPickerView!
    @IBOutlet var pickerView2: UIPickerView!
    @IBOutlet var pickerView3: UIPickerView!

    @IBOutlet var textField1: UITextField!
    @IBOutlet var textField2: UITextField!
    @IBOutlet var textField3: UITextField!

    var brand = ["Cameron","Shaffer", "Hydril"]
    var cameron = ["D Annular Preventer", "UM Ram Preventer", "U Ram Preventer"]
    var shaffer = ["Spherical Annular Preventer", "LXT Ram Preventer", "NXT Ram Preventer"]
    var size = ["7 1/16","11","13 5/8"]
    var size2 = ["8 5/8","12","15 5/8"]

    override func viewDidLoad() {

        super.viewDidLoad()

        pickerView1 = UIPickerView()
        pickerView2 = UIPickerView()
        pickerView3 = UIPickerView()

        pickerView1.tag = 0
        pickerView2.tag = 1
        pickerView3.tag = 2 

    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int  {
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        if pickerView.tag == 0 {
            return brand.count
        } else if pickerView.tag == 1 {
            return cameron.count
        } else if pickerView.tag == 2 {
            return size.count
        }
        return 1
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

        if pickerView.tag == 0 {
            return brand[row]
        } else if pickerView.tag == 1 {
            return cameron[row]
        } else if pickerView.tag == 2 {
            return size[row]
        }
        return ""
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  {

        if pickerView.tag == 0 {
            textField1.text = brand[row]
        } else if pickerView.tag == 1 {
            textField2.text = cameron[row]
        } else if pickerView.tag == 2 {
            textField3.text = size[row]
        } 
    }

cameron 必须用动态查找替换。您需要一个品牌字典,然后您可以将其绑定到 UI:

[当我写这篇文章时,我发现变量名很糟糕;请避免 0、1、2,变量编号的疯狂,3、4,bleah]

在 class 级别:

var brandLookup = [ "cameron": [ "x", "y", "z"], "anotherBrand": ... ]

然后你的委托函数:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView.tag == 0 {
        return brand.count
    } else if pickerView.tag == 1 {
        let brand = textField1.text
        let modelsForBrand = brandLookup[brand]!
        return modelsForBrand.count
    }
    ...
}

类似地:

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)  {
   if pickerView.tag == 0 {
        textField1.text = brand[row]
        pickerView2.reloadAllComponents() // this picker has new data now
   } else if pickerView.tag == 1 {
       let brand = textField1.text
       let modelsForBrand = brandLookup[brand]!
       textField2.text = modelsForBrand[row]
   }
...
}

最后:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    // left as an exercise for you
}