/ / Array de seleção UIPickerView Swift - xcode, swift, uipickerview

Array de seleção UIPickerView Swift - xcode, swift, uipickerview

Atualmente, tenho meu código para funcionar corretamente, maso problema que eu estou tendo problema com o UIPickerView. Agora, se eu selecionar marca Cameron, ele vai para var Cameron, mas se eu selecionar marca Shaffer, ele ainda vai para var Cameron.

Como posso reescrever o código para que, quando eu escolher uma marca diferente, ele selecione uma matriz diferente?

Por exemplo, se eu selecionar cameron da marca, selecione cameron, se eu selecionar a marca Shaffer, escolha shaffer, etc.

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]
}
}

Respostas:

2 para resposta № 1

cameron tem que ser substituído por uma pesquisa dinâmica. Você precisará de um dicionário de marcas, que pode ser vinculado à interface do usuário:

[Enquanto escrevia isto achei os nomes das variáveis ​​horríveis; por favor, evite 0, 1, 2, insanidade de numerar suas variáveis, 3, 4, bleah]

No nível de aula:

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

então o seu delegado funciona:

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
}
...
}

similarmente:

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]
}
...
}

Finalmente:

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