2015-03-08 2 views
1

В настоящее время я получил свой код для правильной работы, но проблема, с которой я столкнулся с UIPickerView. Прямо сейчас, если я выберу бренд Cameron, он отправится в var Cameron, но если я выберу бренд Shaffer, он по-прежнему отправится в Var Cameron.Выбор массива выбора UIPickerView Swift

Как я могу переписать код, поэтому, когда я выбираю другой бренд, он выбирает другой массив?

Например, если выбрать марку Камерона, это выбрать Камерона, если я выбрать марку Шаффер, это выбрать Шаффер и т.д.

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

Не имея энергии, чтобы ответить на этот вопрос, можете ли вы понимать/использовать словари вместо жестко закодированных литералов, чтобы вы могли связать каждую марку с ее допустимыми значениями? Таким образом, массив допустимых значений можно искать на основе * использования бренда в качестве ключа *. – BaseZen

+0

Я раньше не использовал словари. Мне это может понадобиться. – Coder

ответ

2

cameron должен быть заменен с динамическим поиском. Вам понадобится словарь марок, который вы можете связать с пользовательским интерфейсом:

[Как я писал это, я нашел имена переменных ужасными; пожалуйста, не 0, 1, 2, маразм нумерации переменные, 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 
} 
+0

Хорошо, дайте несколько минут, чтобы добавить код в .thanks. – Coder

+0

Итак, я предполагаю, что на смену зрения выбора кода 'FUNC pickerView (pickerView: UIPickerView, numberOfRowsInComponent компонента: Int) -> Int { если pickerView.tag == 0 { возвращение brand.count } еще если pickerView.tag == 1 { let бренд = текстField1.text let modelsForBrand = брендLookup [бренд]! возвратные моделиForBrand [ряд] возвращение 1 } ' – Coder

+0

OK отредактировано для четкости. Примите, если этого достаточно. – BaseZen