[英]Userdefaults to save switch state
我有一個開關,當它轉到“開”時會播放音樂,當開關設置為“關”時,音樂將繼續播放。 我的問題是,當我離開視圖控制器時,當它“打開”時,開關將顯示為“關閉”。 我的開關代碼如下,我不知道該寫什么才能讓應用程序記住開關狀態,請幫忙。
//
// SecondViewController.swift
// Urban Sphere
//
// Created by Oren Edrich on 9/11/16.
// Copyright © 2016 Oren Edrich. All rights reserved.
//
import Foundation
import UIKit
import SpriteKit
import AVFoundation
var bombSoundEffect: AVAudioPlayer!
var Ghost = SKSpriteNode()
class SecondViewController: UIViewController {
var sw = false
@IBOutlet var mySwitch: UISwitch!
@IBAction func switchpressed(_ sender: AnyObject) {
if mySwitch.isOn{
if bombSoundEffect != nil {
bombSoundEffect.stop()
bombSoundEffect = nil
}
}
else{
let path = Bundle.main.path(forResource: "newmusic.wav", ofType:nil)!
let url = URL(fileURLWithPath: path)
do {
let sound = try AVAudioPlayer(contentsOf: url)
bombSoundEffect = sound
sound.numberOfLoops = -1
sound.play()
} catch {
// couldn't load file :(
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
}
我找到了正確的答案並決定發布它以防萬一有人有同樣的問題。
@IBAction func saveSwitchState(sender: AnyObject) {
var defaults = NSUserDefaults.standardUserDefaults()
if bluetoothSwitch.on {
defaults.setBool(true, forKey: "SwitchState")
} else {
defaults.setBool(false, forKey: "SwitchState")
}
}
和...
override func viewDidLoad() {
super.viewDidLoad()
var defaults = NSUserDefaults.standardUserDefaults()
if (defaults.objectForKey("SwitchState") != nil) {
bluetoothSwitch.on = defaults.boolForKey("SwitchState")
}
}
你想知道在哪里插入代碼,我猜。
更新數據
updata2 然后就可以直接運行了。 如果有用,請UP這個答案。
import Foundation
import UIKit
import SpriteKit
import AVFoundation
class SecondViewController: UIViewController {
static let bombSoundEffect = {()->(AVAudioPlayer) in
let path = Bundle.main.path(forResource: "newmusic.wav", ofType:nil)!
let url = URL(fileURLWithPath: path)
return try! AVAudioPlayer(contentsOf: url)
}()
var sw = false
var Ghost = SKSpriteNode()
@IBOutlet var mySwitch: UISwitch!
@IBAction func switchpressed() {
if mySwitch.isOn{
SecondViewController.bombSoundEffect.play()
}else{
SecondViewController.bombSoundEffect.stop()
}
//************* save status *************
UserDefaults.standard.set(mySwitch.isOn, forKey: "SwitchStatus");
}
override func viewDidLoad() {
super.viewDidLoad()
mySwitch.addTarget(self, action: #selector(switchpressed), for: .valueChanged)
//************* load status *************
mySwitch.isOn = UserDefaults.standard.bool(forKey: "SwitchStatus");
switchpressed()
}
}
我和你有類似的情況,我只是使用 UserDefaults。 這是有關如何執行此操作的分步指南。
創建一個變量,如下例所示。 這將設置默認設置並存儲復選框的狀態以供以后使用:
var musicSetting = UserDefaults().string(forKey: "Music") ?? "On"
在您的viewDidLoad
,添加一個 if 語句,該語句將檢查復選框是否應為開或關,如下所示:
if musicSetting == "On" { theNameOfYourSwitch.isOn = false } else { theNameOfYourSwitch.isOn = true }
在復選框的IBAction
屬性中,添加如下 if 語句,該語句將保存您的設置,具體取決於它是什么:
if theNameOfYourCheckbox.state == NSOnState { UserDefaults().set("On", forKey: "Music") } else { UserDefaults().set("Off", forKey: "Music") }
如果你想在用戶默認保存 Switch 的狀態,那么可以使用 native 方法
UserDefaults.standard.set(_ value: Bool, forKey defaultName: String)
像這樣
UserDefaults.standard.set(mySwitch.isOn, forKey: "SwitchStatus");
UserDefaults.standard.synchronize();
在獲取開關狀態時只需使用
let status = UserDefaults.standard.bool(forKey: "SwitchStatus");
更新 :
@IBAction func switchpressed(_ sender: AnyObject) {
UserDefaults.standard.set(mySwitch.isOn, forKey: "SwitchStatus");
if mySwitch.isOn{
if bombSoundEffect != nil {
bombSoundEffect.stop()
bombSoundEffect = nil
}
}
else{
let path = Bundle.main.path(forResource: "newmusic.wav", ofType:nil)!
let url = URL(fileURLWithPath: path)
do {
let sound = try AVAudioPlayer(contentsOf: url)
bombSoundEffect = sound
sound.numberOfLoops = -1
sound.play()
} catch {
// couldn't load file :(
}
}
}
希望能幫助到你
快樂編碼...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.