UIPickerView 选择数组 Swift [英] UIPickerView selection array Swift
问题描述
目前,我的代码可以正常工作,但问题是 UIPickerView 有问题.现在,如果我选择 Cameron 品牌,它会转到 var Cameron,但如果我选择 Shaffer 品牌,它仍然会转到 var Cameron.
Currently, I got my code to work correctly, but the problem I'm having issue with the UIPickerView. Right now, If I select Cameron brand, it goes to var Cameron but if i select Shaffer brand, it still goes to var Cameron.
如何重写代码,以便在选择不同品牌时选择不同的数组?
How can I rewrite the code so when I pick a different brand, it select a different array?
例如,如果我选择品牌cameron,它选择cameron,如果我选择品牌shaffer,它选择shaffer,等等.
For example, if I select brand cameron, it select cameron, if i select brand Shaffer, it pick 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]
}
}
推荐答案
cameron
必须替换为动态查找.您将需要一个品牌字典,然后您可以将其绑定到用户界面:
cameron
has to be replaced with a dynamic lookup. You'll need a dictionary of brands, which you can then tie to the UI:
[在我写这篇文章的时候,我发现变量名很糟糕;请避免 0, 1, 2, 为变量编号的疯狂, 3, 4, bleah]
[As I was writing this up I found the variable names awful; please avoid 0, 1, 2, insanity of numbering your variables, 3, 4, bleah]
在班级层面:
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
}
这篇关于UIPickerView 选择数组 Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!