2017-11-10 20 views
0

View Controller間を変更した後、UISwitchの状態を保存したいと思います。どんな助けでも大歓迎です!SWIFT 4でUISwitchの状態を保存する方法は?

私は別のビューコントローラでは、バックグラウンドで音楽を制御するために、UISwitchとの最初のビューコントローラを持っていない:

@IBOutlet weak var SwitchMusic: UISwitch! 
     let defaults = UserDefaults.standard 
     var switchON : Bool = false 

@IBAction func checkState(_ sender: UISwitch) { 
     if (sender.isOn == true) 
     { 
      switchON = true 
      defaults.set(switchON, forKey: "switchON") 
      MusicHelper.sharedHelper.playBackgroundMusic() 
     } 
     if (sender.isOn == false) 
     { 
      switchON = false 
      defaults.set(switchON, forKey: "switchON") 
      MusicHelper.sharedHelper.stopBackgroundMusic() 
     } 
    } 

と第二ビューコントローラスイッチ場合は、バックグラウンドで音楽を読み込むか、何のためにまた、私は音楽のクラスを持っている

override func viewDidLoad() { 
     super.viewDidLoad() 

     if defaults.value(forKey: "switchON") != nil{ 
      let switchON: Bool = defaults.value(forKey: "switchON") as! Bool 
      if switchON == true{ 
       MusicHelper.sharedHelper.playBackgroundMusic() 
      } 
      else if switchON == false{ 
       MusicHelper.sharedHelper.stopBackgroundMusic() 
      } 
     } 
    } 

:オンまたはオフされる

class MusicHelper { 

    let defaults = UserDefaults.standard 

    static let sharedHelper = MusicHelper() 

    var musicBackgroundIntro:AVAudioPlayer = AVAudioPlayer() 
    func playBackgroundMusic() { 
     do { 
      let audioPath = Bundle.main.path(forResource: "Music", ofType: "mp3") 
      try musicBackgroundIntro = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: audioPath!) as URL) 
      musicBackgroundIntro.numberOfLoops = -1 
      musicBackgroundIntro.prepareToPlay() 
      musicBackgroundIntro.play() 
     } catch { 
      print("Cannot play the file") 
     } 
    } 
    func stopBackgroundMusic() { 
     musicBackgroundIntro.stop() 
    } 

}

View Controller間でバックグラウンドで音楽が完璧に動作していて、電源を切ることはできますが、残念ながらUISwitchの現在の状態は保存されません。ファーストビューコントローラでは、スイッチの状態はオンです。

また、どのようにスライダにも適用することができるという考えはありますか?

ご協力いただければ幸いです!

おかげ

+0

MusicHelperはモーダルで表示されますか? –

+0

ありがとうございました。「ViewControllersを変更するときにUISwitchの状態を維持するにはどうすればよいですか?それはまさに私が探していたものでした! – Manu

答えて

0

あなたはこの状態は、前後遷移の間で保存されますstatic var isSwitchOn: Bool = false

作成することですための最も簡単な方法。

音楽が再生されている場合は、状態を反映している必要があり
0

...

class MusicHelper { 
    public isPlaying: Bool { 
     get { 
      return musicBackgroundIntro.isPlaying 
     } 
    } 

// your stuff here.. 

} 

ほかのView Controllerでその方法:

SwitchMusic.isOn = MusicHelper.sharedHelper.isPlaying 

あなたはこれに応じて更新するために、他のビューコントローラが必要な場合必要に応じて、デリゲートイベント(別名オブザーバー)を追加することができます。

0

viewcontroller1で作成したスイッチにデフォルト値を与えることができます。

(default.value(forKey:"switchOn") as! Bool) ?? falseをそのスイッチに割り当てます。

+0

またはprepareを使用してください(segue:UIStoryboardSegue、送信者:Any?) –

0

UISwitch@IBOutletとして使用してください。

@IBOutlet weak var checkState: UISwitch! 

override func viewDidLoad() { 
     super.viewDidLoad() 
    self.checkState.addTarget(self, action: #selector(action(sender:)), for: .valueChanged) 
} 

// Save state 
func action(sender: UISwitch) { 

    let userDefaults = UserDefaults.standard 
    userDefaults.set(sender.isOn, forKey:"identifier") 

} 

// Retrieve state 
override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

    let userDefaults = UserDefaults.standard.bool(forKey: "identifier") 
    self.checkState.setOn(userDefaults, animated: false) 

} 
関連する問題