winter4w
winter4w

Reputation: 57

Disable Button from another view controller with a switch with swift

Ok so I am trying to make it when the user flips the cheat mode switch it will disable the answerButton. I did try to set the button to disable near the bottom however it does not appear to do anything. I added the print("") to see if it would print in the console however nothing was printed. I a unsure what is wrong here.

I have pasted my code below.

import Foundation
import UIKit


class SettingsController: UITableViewController {

@IBOutlet weak var cheatSwitch: UISwitch!



override func viewDidLoad() {
    super.viewDidLoad()

    cheatSwitch.isOn = UserDefaults.standard.bool(forKey: "switchState")
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func saveSettings(_ sender: UISwitch) {
    UserDefaults.standard.set(cheatSwitch.isOn, forKey: "switchState")
    UserDefaults.standard.synchronize()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let mainView : ViewController = segue.destination as! ViewController

    if cheatSwitch.isOn == true {
        print("turn off button")
        mainView.btnAnswer.isEnabled = false;

    }

    else {
        print("turn on button")
        mainView.btnAnswer.isEnabled = true;
    }


}

}

Upvotes: 1

Views: 1518

Answers (1)

Nirav D
Nirav D

Reputation: 72410

You are saving the value UISwitch's state in UserDefaults so you can use its value in ViewController's method viewDidApper.

override func viewDidAppear(_ animated: Bool) {
    self.btnAnswer.isEnabled = !UserDefaults.standard.bool(forKey: "switchState")
}

Note: There is no need to add prepareForSegue in your SettingsController because it will never called when you press back button of NavigationController so consider to remove it.

Upvotes: 1

Related Questions