2014-10-21 13 views
8

Ho cercato attraverso il forum e nulla ha aiutato. Sto usando 4 campi di testo in un controller di visualizzazione, e per ogni campo di testo, sto usando un pickerView separato come inputViews per i campi di testo (4pickers).Raccoglitori multipli con più inputput di campo di testo rapido

Quando faccio clic sul primo campo di testo, viene visualizzato correttamente pickerView1 e il campo di testo visualizza i dati, tuttavia quando faccio clic sul secondo, terzo e quarto campo di testo, viene visualizzato il primo visualizzatore. Sospetto che l'errore si trovi nelle dichiarazioni di inputView.

E lo apprezzerei molto se potessi contribuire ad aggiungere un pulsante "completato" al pickerView.

Il mio codice:

class ViewController1: UIViewController, UIPickerViewDelegate 
{ 

    @IBOutlet var pickerView1: UIPickerView! 
    @IBOutlet var pickerView2: UIPickerView! 
    @IBOutlet var pickerView3: UIPickerView! 
    @IBOutlet var pickerView4: UIPickerView! 

    @IBOutlet var textField1: UITextField! 
    @IBOutlet var textField2: UITextField! 
    @IBOutlet var textField3: UITextField! 
    @IBOutlet var textField4: UITextField! 

    var hazards = ["a","b", "c"] 
    var reasons = ["d", "e", "f"] 
    var site = ["v","h","i","j"] 
    var line = ["k", "l","m", "n"] 

    override func viewDidLoad() { 

     super.viewDidLoad() 
     pickerView1 = UIPickerView() 
     pickerView2 = UIPickerView() 
     pickerView3 = UIPickerView() 
     pickerView4 = UIPickerView() 
     pickerView1.delegate = self 
     pickerView2.delegate = self 
     pickerView3.delegate = self 
     pickerView4.delegate = self 

     self.textField1.inputView = self.pickerView1; 
     self.textField2.inputView = self.pickerView2; 
     self.textField3.inputView = self.pickerView3; 
     self.textField4.inputView = self.pickerView4; 
    } 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

     if pickerView.tag == 0 { 
      return hazards.count 
     } else if pickerView.tag == 1 { 
      return reasons.count 
     } else if pickerView.tag == 2 { 
      return site.count 
     } else if pickerView.tag == 3 { 
      return line.count 
     } 
     return 1 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 

     if pickerView.tag == 0 { 
      return hazards[row] 
     } else if pickerView.tag == 1 { 
      return reasons[row] 
     } else if pickerView.tag == 2 { 
      return site[row] 
     } else if pickerView.tag == 3 { 
      return line[row] 
     } 

     return "" 
    } 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

     if pickerView.tag == 0 { 
      textField1.text = hazards[row] 
     } else if pickerView.tag == 1 { 
      textField2.text = reasons[row] 
     } else if pickerView.tag == 2 { 
      textField3.text = site[row] 
     } else if pickerView.tag == 3 { 
      textField4.text = line[row] 
     } 
    } 
} 
+1

Ecco un posto per iniziare con l'aggiunta di un pulsante Done: http://blog.swierczynski.net/2010/12/how-to-create-uipickerview-with -toolbar-above-it-in-ios/ –

risposta

10

si sta utilizzando la proprietà il punto di vista picker tag per decidere quale matrice è la fonte di dati per una determinata vista picker, ma non è stata impostata inizialmente i tag. Il valore tag è impostato su zero, pertanto tutte e quattro le visualizzazioni di selezione mostrano gli stessi dati. Dopo un'istanza vostre opinioni picker, aggiungere questo:

pickerView1.tag = 0 
pickerView2.tag = 1 
pickerView3.tag = 2 
pickerView4.tag = 3 
+0

Ho già impostato i tag per i pick-up utilizzando xcode, sono sicuro che visualizzano dati diversi come se rimuovessi le chiamate di inputview e mostrassero i picker sulla pagina, mostra dati diversi. Anche questo tutorial è nell'obiettivo C, che non capisco. –

+0

Vuoi dire che hai impostato i tag nello storyboard? Quando si creano nuove viste di selezione (ad esempio, con questo codice: 'pickerView1 = UIPickerView()') non viene applicata alcuna impostazione. –

+0

Grazie !!! Ha funzionato! Ho avuto i tag impostati nell'ispettore attributi ma non il codice. –

Problemi correlati