/ / UIPickerView Auswahlarray Swift - xcode, swift, uipickerview

UIPickerView Auswahl Array Swift - xcode, swift, uipickerview

Derzeit habe ich meinen Code richtig funktioniert, aberDas Problem Ich habe ein Problem mit dem UIPickerView. Im Moment, wenn ich die Marke Cameron auswähle, geht es zur Sorte Cameron, aber wenn ich die Marke Shaffer auswähle, geht es immer noch zur Sorte Cameron.

Wie kann ich den Code so umschreiben, dass bei Auswahl einer anderen Marke ein anderes Array ausgewählt wird?

Wenn ich zum Beispiel die Marke Cameron auswähle, wird Cameron ausgewählt. Wenn ich die Marke Shaffer auswähle, wird Shaffer ausgewählt.

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

Antworten:

2 für die Antwort № 1

cameron muss durch eine dynamische Suche ersetzt werden. Sie benötigen ein Markenwörterbuch, das Sie dann mit der Benutzeroberfläche verknüpfen können:

[Als ich das aufschrieb, fand ich die Variablennamen schrecklich; bitte vermeiden Sie 0, 1, 2, Wahnsinn, Ihre Variablen zu nummerieren, 3, 4, bleah]

Auf Klassenebene:

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

dann hat Ihr Stellvertreter folgende Funktionen:

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

ähnlich:

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

Endlich:

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