使用带有swift的开关从另一个视图控制器禁用Button

时间:2017-02-07 03:52:13

标签: ios swift xcode

好的,所以我试图在用户翻动作弊模式开关时进行,它将禁用answerButton。我确实尝试将按钮设置为在底部附近禁用,但它似乎没有做任何事情。我添加了打印("")以查看它是否会在控制台中打印,但是没有打印任何内容。我不确定这里有什么问题。

我已粘贴下面的代码。

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;
    }


}

}

1 个答案:

答案 0 :(得分:1)

您要在UISwitch中保存UserDefaults的值状态,以便在ViewController's方法viewDidApper中使用其值。

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

注意:您无法在prepareForSegue中添加SettingsController,因为当您按下NavigationController的后退按钮时它永远不会被调用,所以请考虑删除它