2016-02-29 3 views
7

Ich versuche herauszufinden, wie die ausgewählte Zeile angezeigt wird, wenn ich nach der letzten Auswahl UIPickerView öffne.UIPickerView mit ausgewählter Zeile anzeigen

Wenn ich meine PickerView wieder öffne, möchte ich meine UIPickerView ausgewählte Zeile, die ich zuletzt gewählt habe.

Gibt es einen Weg in Swift?

Antwort

5

UIPickerView api können Sie Reihe in einer beliebigen Komponente in Code wählen:

func selectRow(_ row: Int, 
    inComponent component: Int, 
     animated animated: Bool) 

Also, wenn Sie für Ihre Pickers ausgewählten Indizes gespeichert Komponenten rufen Sie diese Methode für jede Komponente, bevor Sie wieder Picker zeigen.

+1

Irgendwelche Ideen für die Umsetzung dieses Codes wohin? –

+0

Sie müssen diesen Code dort platzieren, wo Sie Ihre Picker-Ansicht eingerichtet haben. Ist es das Problem, das du hast? Speichern Sie ausgewählte Indizes irgendwo? – Vladimir

2

Wenn dies zum Speichern einer Art von Einstellung dient, sollten Sie sich die Verwendung von persistentem Speicher wie NSUserDefaults ansehen. Wenn die Auswahl geändert wird, speichern Sie den NSUserDefaults-Wert. Dann können Sie in Ihrer viewDidLoad-Methode die Picker-Ansicht auf die Zeile setzen, die Sie zuvor gespeichert haben.

Verwenden Sie zum Beispiel diese Zeilen, wenn Sie die Pickeransicht erkennen. PickerView wurde geändert, um die Zeile in der SchlüsselauswahlViewValue zu speichern. Setzen Sie dies in didSelectRow für PickerView.

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject(row, forKey: "pickerViewRow") 

Dann, wenn Sie die Ansicht laden, verwenden Sie diese den Picker auf die gespeicherte Zeile zu setzen:

let defaults = NSUserDefaults.standardUserDefaults() 
if let pickerViewRow = defaults.stringForKey("pickerViewRow") 
{ 
    pickerView.selectRow(pickerViewRow, inComponent: 0, animated: true) 
} 
+0

Jede mögliche Code-Hilfe wird geschätzt. Danke –

+0

Danke für die Hilfe! –

+0

in Swift 3: lassen defaults = UserDefaults.standard defaults.set (row, forKey: "pickerViewRow") – user2867432

9

Sie können die zuletzt gewählte Zeile in NSUserDefaults speichern, um den Wert in viewDidLoad Ihrer Ansicht abrufen Controller und die ausgewählte Zeile der Auswahl zum Index des ausgewählten Werts aus einem Array von Werten.

class Pick: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

var picker = UIPickerView() 
var selected: String { 
    return NSUserDefaults.standardUserDefaults().stringForKey("selected") ?? "" 
} 
var data = ["One", "Two", "Three"] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    picker.delegate = self 
    picker.dataSource = self 
    if let row = data.indexOf(selected) { 
     picker.selectRow(row, inComponent: 0, animated: false) 
    } 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return data.count 
} 

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

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return data[row] 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    NSUserDefaults.standardUserDefaults().setObject(data[row], forKey: "selected") 
} 

} 
+0

Danke für die Hilfe !! Ich habe es jetzt. –

1

Für Swift 3

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if(pickerView.tag==0){ 
     //set some global variable 
    } 
}