web-dev-qa-db-fra.com

Affichage d'UIPickerView avec la ligne sélectionnée

J'essaie de comprendre comment afficher la ligne sélectionnée lorsque j'ouvre UIPickerView après sa dernière sélection.

Lorsque j'ouvre à nouveau ma PickerView, je veux que mon UIPickerView définit la ligne sélectionnée que j'ai choisie la dernière fois.

Y a-t-il un moyen dans Swift?

13
Thiha Aung

L'API UIPickerView vous permet de sélectionner une ligne dans n'importe quel composant du code:

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

Donc, si vous avez stocké des indices sélectionnés pour les composants de votre sélecteur, appelez simplement cette méthode pour chaque composant avant de montrer à nouveau le sélecteur.

9
Vladimir

Vous pouvez enregistrer la dernière ligne sélectionnée dans NSUserDefaults, récupérer la valeur dans viewDidLoad de votre contrôleur de vue et la ligne sélectionnée de votre sélecteur dans l'index de la valeur sélectionnée à partir d'un tableau de valeurs.

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")
}

}
18
Ahmed Onawale

Pour Swift

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

S'il s'agit de stocker une sorte de paramètre, vous pouvez envisager d'utiliser un stockage persistant comme NSUserDefaults. Lorsque le sélecteur est modifié, enregistrez la valeur NSUserDefaults. Ensuite, dans votre méthode viewDidLoad, vous pouvez définir la vue du sélecteur sur la ligne que vous avez enregistrée précédemment.

Par exemple, utilisez ces lignes lorsque vous détectez que la vue du sélecteur pickerView a changé pour stocker la ligne dans la clé pickerViewValue. Mettez ceci dans didSelectRow pour pickerView.

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

Ensuite, lorsque vous chargez la vue, utilisez-la pour définir le sélecteur sur la ligne enregistrée:

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