2016-12-19 67 views
0

我已經創建了一個自定義表格視圖單元格。在我的應用程序中,有兩個文件。我有一個自定義表格視圖單元格的單獨文件。然後我有一個tableviewcontroller文件作爲一個整體的表。如何使用用戶默認值保存開關的開/關值?

在我的自定義表格視圖單元格上,有一個UISwitch。這個UISwitch的初始值是關閉的。在自定義表格視圖單元的文件中,我爲交換機創建了一個函數。我還爲交換機創建了一個插座。

@IBOutlet var theSwitch: UISwitch! 

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

在我的表視圖控制器中,我已經創建了視圖確實出現的功能。我假設我需要做的是保存開關的值在

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

然後在表視圖控制器,以某種方式把它在該視圖中確實出現功能。

override func viewDidAppear(_ animated: Bool) { 
} 

我遇到的麻煩是保存開關的值,如果它改變了。例如,如果用戶打開應用程序並打開開關,我希望應用程序將其保存,以便重新打開應用程序時,開關的值仍然保持打開狀態。希望這可以通過使用用戶默認值來完成。如果有人可以給我看代碼來做到這一點,那就太好了。

+0

您的問題是否得到解決? – PiyushRathi

回答

2

你可以這樣檢查值:

斯威夫特2

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

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

和保存價值userDefaults:

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

斯威夫特3

let uDefault = UserDefaults.standard 

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

,並設值爲

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

希望這有助於

+4

不要不必要地調用'synchronize'。 – rmaddy

+3

這個問題被標記爲Swift 3.這是Swift 2的代碼。 – rmaddy

+0

@rmaddy ok更新了答案。 – PiyushRathi

3

在你IBAction方法你一個保存這樣的方式

@IBAction func mySwitch(_ sender: UISwitch) { 

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

} 

在您的表視圖的委託方法的值寫入這種方式來獲得來自用戶默認的值並根據您以前的值設置切換狀態

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

不要不必要地調用'synchronize'。 – rmaddy

+0

@rmaddy你是正確的 –

2

正如PiyushRathi說,可以使用的NSNumber做到這一點,但可以通過設置爲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) 

爲SWIFT 3(作爲EmilioPelaez建議的):

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

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

另外,如果你有很多的UI組件省下超過開關之外,你也應該看看this UIViewController的「狀態保存指南」。

+0

比使用更好的'NSNumber',但是,這是怎麼想看看在斯威夫特3:'UserDefaults.standard.bool(forKey: 「SwitchValue」)','UserDefaults.standard.set( switch.isOn,forKey: 「SwitchValue」)' – EmilioPelaez

+0

問題是標記夫特3.這是夫特2代碼。 – rmaddy

+0

@rmaddy更新。 –

4

您可以使用setBoolForkey斯威夫特3這樣

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

,你可以檢查在viewDidLoad中的值(),以按照「onoroff」

值改變開關的狀態
theSwitch.setOn(UserDefaults.standard.bool(forKey: "onoroff"), animated: false)