2017-12-27 13 views
0

Mein Code hat jetzt eine Picker-Ansicht, die ein Wort in ein Textfeld schreibt. Das Problem besteht darin, dass der Benutzer das Wort in der Auswahlansicht ändern muss, damit es funktioniert. Ich habe einige weitere Informationen unter meinem Bild hinzugefügt.Picker-Ansicht wählt kein erstes Objekt aus

import UIKit 

class ViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource { 
    @IBOutlet var tx: UITextField! 

    let animals = ["lion", "Dog","JUDO"] 
    var pickerview = UIPickerView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib 

     pickerview.delegate = self 
     pickerview.dataSource = self 
     tx.inputView = pickerview 
     let toolbar = UIToolbar(frame: CGRect(x: 0, y: UIApplication.shared.statusBarFrame.height, width: view.bounds.width, height: 44)) 

     var items = [UIBarButtonItem]() 


     items.append(UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneAction))) 
     toolbar.items = items 
     tx.inputAccessoryView = toolbar 
    } 
    @objc func doneAction(){ 

     tx.resignFirstResponder() 
     view.endEditing(true) 

    } 
    public func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 
    public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return animals.count 
    } 
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return animals[row] 
    } 
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     tx.text = animals[row] 

    } 
} 

picker view with default value selected; text field is empty

Wenn ich auf die Schaltfläche Fertig getroffen, wird nichts übertragen. Ich müsste von "Lion" nach "Dog" scrollen, dann zurück zu "Lion" um "Lion" zu übertragen. Ich möchte nur die Schaltfläche "Fertig" drücken und "Lion" übertragen lassen.

Antwort

0

Der Wert der Picker-Ansicht ändert sich zunächst nicht. Sie sollten das erste Element Ihres Arrays den Text des Textfelds in viewDidLoad machen.

override func viewDidLoad() { 
    [...] 

    tx.text = animals.first 
} 
+0

Gibt es trotzdem eine Anordnung, in der man immer die Ansicht des Pickers hat, um immer zuerst den Löwen erscheinen zu lassen, egal was? –

+0

@SamBurns Ich fürchte, ich verstehe es nicht. In der Auswahlansicht wird derzeit "Löwe" als erstes Element angezeigt. – the4kman

+0

Wenn ich einen Hund auswähle. Klicken Sie dann auf das Textfeld Hund ist das erste, was angezeigt wird oder was der Benutzer gerade auswählt –

0

Versuchen folgende Lösung

@objc func doneAction(){ 

    tx.resignFirstResponder() 

    // get first index value of array if tx is empty 
    if (tx.text?.isEmpty)! { 
     tx.text = self.animals.first 
    } 

    view.endEditing(true) 

} 
0

Wenn Sie auf, klicken Sie auf Fertig, um bekommen Wert von Picker mögen, sollten Sie pickerview.selectedRow(inComponent: 0) verwenden aktuellen Wert in Picker Ansicht gewählt zu bekommen. Wenn Sie den Picker öffnen und schließen, ohne zu scrollen, wird func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) nicht aufgerufen. Also muss der Code wie folgt geändert werden:

Verwandte Themen