2017-03-02 5 views
1

ich den Zustand der UISegmentedControl in swift3 speichern haben eine UISegmentedControl langSeg mit zwei Indizes markierten genannt [Englisch & Deutsch], die die Sprache von Etiketten in meiner App steuert unter Verwendung des Codes:Wie mit userDefaults

@IBAction func indexChanged(sender: UISegmentedControl) { 

    switch langSeg.selectedSegmentIndex 
    { 
    case 0: 

     let language = "en" 
     let path = Bundle.main.path(forResource: language, ofType: "lproj") 
     let bundle = Bundle(path: path!) 
     headerLbl.text = bundle?.localizedString(forKey: "HLbl", value: nil, table: nil) 
     UserDefaults.standard.set(["en"], forKey: "AppleLanguages") 

    case 1: 

     let language = "de" 
     let path = Bundle.main.path(forResource: language, ofType: "lproj") 
     let bundle = Bundle(path: path!) 
     descLbl.text = bundle?.localizedString(forKey: "DLbl", value: nil, table: nil) 
     UserDefaults.standard.set(["de"], forKey: "AppleLanguages") 

    default: 
     break; 
    } 
} 

, um zwischen Englisch und Deutsch zu wechseln und die Auswahl des Benutzers zu speichern; Dieser Code funktioniert gut, aber wenn ich meine App neu starte, nachdem ich beispielsweise die Sprache auf Deutsch geändert habe, werden die Label-Titel in deutscher Sprache gespeichert, aber der segmentierte Control-Status wurde zurück in den englischen Titel [Index 0] geändert. Bitte, ich brauche Hilfe, um die Benutzerauswahl des UISegmentedControl zu speichern, jede Hilfe wird wirklich geschätzt. Ich habe versucht, diesen Code:

langSeg.selectedSegmentIndex = sender.selectedSegmentIndex 
UserDefaults.standard.integer(forKey: "SegmentIndex") 

innen

@IBAction func indexChanged(sender: UISegmentedControl) 

Nach den Schalterhalter, aber leider hat es nicht funktioniert ...

Antwort

2
class ViewController: UIViewController { 

    @IBOutlet weak var segmentedControl: UISegmentedControl! 

    @IBAction func segmentSelected(_ sender: UISegmentedControl) { 

     UserDefaults.standard.set(sender.selectedSegmentIndex, forKey: "chosenLanguage") 
    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let value = UserDefaults.standard.value(forKey: "chosenLanguage"){ 
      let selectedIndex = value as! Int 
      segmentedControl.selectedSegmentIndex = selectedIndex 
     } 

    } 
} 
+0

Danke @Alan, es funktioniert :) – SwiftyLearner

1

Sie müssen die segmentierte Kontrolle zurückzustellen.

index = UserDefaults.standard.integer(forKey: "SegmentIndex") 
segmented.selectedSegmentIndex = index 

Ich habe dies in Ihrer viewWillAppear Methode oder etwas ähnliches würde. Stellen Sie nur sicher, dass es nach der Initialisierung Ihres segmentierten Steuerelements ist.

+0

Wo kann ich diesen Code hinzufügen? Ich habe es in der @IBAction versucht, aber die segmentierte Control wurde nicht umschaltbar. – SwiftyLearner

+0

Ich würde es in 'viewDidAppear' hinzufügen – LoganHenderson

Verwandte Themen