xcode - UIPickerView 选择数组 Swift

标签 xcode swift uipickerview

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

如何重写代码,以便在我选择不同的品牌时选择不同的数组?

例如,如果我选择品牌 cameron,它会选择 cameron,如果我选择品牌 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 必须替换为动态查找。您需要一个品牌字典,然后您可以将其绑定(bind)到 UI:

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

在类里面:

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

然后你的委托(delegate)函数:

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
}

关于xcode - UIPickerView 选择数组 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28932902/

相关文章:

arrays - 如何使用路径中文件中的数组序列化 JSON 数组?

ios - 多个文本字段的 PickerView 只显示一个数组

ios - 将值设置为 UIPickerView 行错误 iOS

ios - iOS 6 中的位置显着变化功能调用频率不如 iOS 5

ios - SwiftUI 从列表项 View 中隐藏列表项

ios - UIView 阴影,cornerradius 不工作

ios - 为什么不一开始就用var?

iphone - 如何在 iPhone 上创建多列网格?

ios - 您遇到过因 Xcode 和 SDK 版本不匹配而拒绝 iOS 应用程序的经历吗?

ios - 如何更改 UIPickerView 选择器的颜色