2017-01-09 62 views
0

所以我有一个选项卡式应用程序。在最后一个选项卡中,我有一个UISwitch,我希望它能够更改位于第一个选项卡中的UITableView的背景。所述开关被这样定义:修改位于另一个视图中的UISwitch的UITableView外观

@IBOutlet weak var darkModeSwitch: UISwitch! 

然后用于设置UserDefaults动作:

@IBAction func setUserDefaults() { 
    let defaults = UserDefaults.standard 
    defaults.set(darkModeSwitch.isOn, forKey: "switchState") 
} 

和最后一个标签,从UserDefaults读取的的viewDidLoad:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let defaults = UserDefaults.standard 
    let switchState = defaults.bool(forKey: "switchState") 
    darkModeSwitch.isOn = switchState 
} 

的UserDefaults部分作品。然而,标题中提到的事情没有。我试过设置一个全局变量:

var on = false 

与在IBAction为下面的代码更改为true

if darkModeSwitch.isOn { 
    on = true 
} 

,并在UITableView中的viewDidLoad():

if on == true { 
    self.tableView.backgroundColor = UIColor.black 
} 

但它什么也没有做。你能帮我吗?

回答

0

ViewDidLoad只被调用一次。如果视图控制器在按钮被击中之前被加载,那么你可以期望它什么都不做。如果你杀了应用程序并重新打开它,那么你可以期望看到变化。试试viewWillAppear更新颜色。每次用户浏览和返回时都会调用该方法。

+0

即使重新启动应用程序,颜色也不会更改。你确定我的代码是正确的吗? – user7395692

+0

你是否在self.tableView.backgroundColor = UIColor.black处击中断点?如果是,那么switchState在darkModeSwitch.isOn = switchState时是否正确? –

+0

我不明白你问什么。 – user7395692

相关问题