/ / Tableau de sélection UIPickerView Swift - xcode, swift, uipickerview

Tableau de sélection UIPickerView Swift - xcode, swift, uipickerview

Actuellement, mon code fonctionne correctement, maisle problème que j’ai eu avec UIPickerView. Pour le moment, si je sélectionne la marque Cameron, il passe au var Cameron, mais si je sélectionne la marque Shaffer, il reste affecté au var Cameron.

Comment puis-je réécrire le code pour que lorsque je choisis une marque différente, il sélectionne un autre tableau?

Par exemple, si je sélectionne cameron, il sélectionne cameron, si je sélectionne la marque Shaffer, il sélectionne 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]
}
}

Réponses:

2 pour la réponse № 1

cameron doit être remplacé par une recherche dynamique. Vous aurez besoin d’un dictionnaire de marques que vous pourrez ensuite associer à l’interface utilisateur:

[En écrivant ceci, j'ai trouvé les noms de variables affreux; s'il vous plaît éviter 0, 1, 2, la folie de numéroter vos variables, 3, 4, bleah]

Au niveau de la classe:

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

alors vos fonctions de délégué:

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

De même:

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

Finalement:

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