2016-12-19 3 views
0

Ich habe eine benutzerdefinierte Tabellenansicht Zelle erstellt. In meiner App gibt es zwei Dateien. Ich habe eine separate Datei für die benutzerdefinierte Tabellenansichtszelle. Dann habe ich eine TableviewController-Datei für die Tabelle als Ganzes.Wie man den Ein/Aus-Wert eines Schalters mit Benutzervorgaben speichert?

In meiner benutzerdefinierten Tabellenansicht Zelle gibt es einen UISwitch. Der Anfangswert dieses UISwitch ist ausgeschaltet. In der Datei für die benutzerdefinierte Tabellenansichtszelle habe ich eine Funktion für den Switch erstellt. Ich habe auch eine Steckdose für den Schalter erstellt.

@IBOutlet var theSwitch: UISwitch! 

@IBAction func mySwitch(_ sender: AnyObject) { 
} 

In meinem Tabellenansicht-Controller habe ich bereits erstellt die Ansicht Funktion erschien. Ich gehe davon aus, was ich tun muss, ist, den Wert des Schalters in

@IBAction func mySwitch(_ sender: AnyObject) { 
} 

dann in der Tabelle View-Controller speichern, rufen Sie es irgendwie in dieser Ansicht tat Funktion erscheinen.

Ich habe Probleme mit dem Speichern des Werts des Schalters, wenn es geändert wird. Wenn ein Nutzer zum Beispiel die App öffnet und den Schalter einschaltet, möchte ich, dass die App sie speichert. Wenn die App erneut geöffnet wird, ist der Wert des Switches noch immer aktiviert. Hoffentlich kann dies durch die Verwendung von Benutzereinstellungen erreicht werden. Wenn jemand mir den Code zeigen könnte, wäre das großartig.

+0

ist Ihr Problem gelöst? – PiyushRathi

Antwort

2

Sie Wert wie folgt überprüfen:

Swift 2

let userDefaults = NSUserDefaults.standardUserDefaults() 
    if userDefaults.valueForKey("SwitchValue") != nil{ 

     let object = userDefaults.valueForKey("SwitchValue") as? NSNumber 
     yourSwitch.on = (object?.boolValue)! 
    } 

und für Wert userDefaults Sparend:

userDefault.setValue(NSNumber(bool: yourSwitch.value), forKey:"SwitchValue") 

Swift 3

let uDefault = UserDefaults.standard 

if uDefault.value(forKey: "SwitchValue") != nil{ 
    let object = uDefault .value(forKey: "SwitchValue") as? NSNumber 
    yourSwitch.isOn = (object?.boolValue)! 
} 

und Sollwert

uDefault.set(NSNumber(bool: yourSwitch.value), forKey: "SwitchValue") 

hoffe, das hilft

+4

Nicht unnötig "Synchronisieren" nennen. – rmaddy

+3

Die Frage ist markiert Swift 3. Dies ist Swift 2 Code. – rmaddy

+0

@rmaddy ok aktualisierte Antwort. – PiyushRathi

3

In Ihrem IBAction Methode ein Sie den Wert wie auf diese Weise speichern

@IBAction func mySwitch(_ sender: UISwitch) { 

    UserDefaults.standard.set(sender.isOn, forKey: "Switch") 

} 

In Ihrem Tabellenansicht Delegatmethode auf diese Weise schreiben zu bekommen der Wert von Benutzerstandard und den Status von Ihnen Schalter gemäß Ihrem vorherigen Wert

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let yourCell = tableView.dequeueReusableCellWithIdentifier("ProfileCell", forIndexPath: indexPath) as! MenuProfileTableViewCell 
    if let switchIsOn = UserDefaults.standard.bool(forKey: "Switch") as? Bool { 
     yourCell.yourSwitch.isOn = switchIsOn 
    } 

} 
+1

Nicht unnötig "Synchronisieren" aufrufen. – rmaddy

+0

@rmaddy Sie haben Recht –

2

Wie PiyushRathi sagte, können Sie es tun mit NSNumber, aber Sie können es über die Einstellung als auch auf Bool:

Swift 2,3

// saving switch value 
NSUserDefaults.standardUserDefaults().setBool(theSwitch.on, forKey: "SwitchValue") 

// getting back the value 
theSwitch.setOn(NSUserDefaults.standardUserDefaults().boolForKey("SwitchValue"), animated: true) 

Für Swift 3 (As EmilioPelaez vorgeschlagen):

// saving switch value 
UserDefaults.standard.set(theSwitch.isOn, forKey: "SwitchValue") 

// getting back the value 
theSwitch.setOn(UserDefaults.standard.bool(forKey: "SwitchValue"), animated: true) 

auch wenn Sie viele UI-Komponenten haben andere als Schalter zu sparen, sollten Sie auch einen Blick auf this der UIViewController haben „State Erhaltung Guide“.

+0

Viel besser als mit 'NSNumber', aber so würde es in Swift 3 aussehen:' UserDefaults.standard.bool (forKey: "SwitchValue") ',' UserDefaults.standard.set (switch.isOn, forKey: "SwitchValue") ' – EmilioPelaez

+0

Die Frage ist markiert Swift 3. Dies ist Swift 2 Code. – rmaddy

+0

@rmaddy Aktualisiert. –

4

Sie können setBoolForkey in swift 3 gefällt dieses

UserDefaults.standard.set(true, forKey: "onoroff") 

verwenden, wo Sie speichern möchten, und Sie können den Wert in viewDidLoad() den Status des Schalters zu ändern, entsprechend dem Wert von „onoroff“

theSwitch.setOn(UserDefaults.standard.bool(forKey: "onoroff"), animated: false) 
Verwandte Themen