2017-01-09 55 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

相關問題