2016-02-29 18 views
7

Sto cercando di capire come mostrare la riga selezionata quando apro UIPickerView dopo che è stata selezionata l'ultima volta.Visualizzazione di UIPickerView con riga selezionata

Quando apro di nuovo il PickerView, desidero il mio UIPickerView per impostare la riga selezionata che scelgo l'ultima volta.

C'è qualche modo in Swift?

risposta

5

UIPickerView API consentono di selezionare riga in qualsiasi componente in codice:

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

Quindi, se è stato memorizzato indici selezionati per i componenti del vostro picker basta chiamare questo metodo per ogni componente prima di mostrare di nuovo selettore.

+1

Tutte le idee per mettere questo codice a dove? –

+0

È necessario inserire questo codice in cui si imposta la visualizzazione di selezione. È il problema che hai? Salva qualche indice selezionato da qualche parte? – Vladimir

2

Se si tratta di memorizzare qualche tipo di impostazione, si consiglia di utilizzare l'archiviazione permanente come NSUserDefaults. Quando il selettore viene modificato, salvare il valore NSUserDefaults. Quindi nel tuo metodo viewDidLoad puoi impostare la vista del selettore sulla riga salvata in precedenza.

Ad esempio, utilizzare queste righe quando si rileva il selettore di visualizzazione del selettore. È stato modificato per memorizzare la riga nel selettore di tastiViewValue. Metti questo in didSelectRow per pickerView.

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

Poi, quando si carica la vista, utilizzare questo per impostare il selettore alla riga salvato:

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

Qualsiasi aiuto di codice di esempio è apprezzato.Grazie –

+0

Grazie per l'aiuto! –

+0

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

9

è possibile salvare l'ultima riga selezionata nella NSUserDefaults, recuperare il valore in viewDidLoad della vista controller e la riga selezionata del selettore sull'indice del valore selezionato da una matrice di valori.

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

Grazie per l'aiuto !! Ho capito ora. –

1

Per Swift 3

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