我有一个vc,可以在其中更改应用程序的背景颜色。
每次按下按钮时,VC的所有背景都会更改,容器VC除外。我想那是因为它在某种程度上包含了后台菜单。
您可以从侧面菜单访问后台vc。
我在后台菜单中使用的代码如下:
@IBAction func lightBrownButton(_ sender: Any) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.containerVC?.colorView.backgroundColor = lightBrown
colorView.backgroundColor = lightBrown
//I have an extension for this
defaults.setColor(color: lightBrown, forKey: BackgroundColorKey)
}
在其他VC中,我实现了这一点:
if defaults.value(forKey: BackgroundColorKey) != nil {
defaults.synchronize()
let color = defaults.colorForKey(key: BackgroundColorKey)
view.backgroundColor = color
colorView.backgroundColor = color
}
NB。 colorView只是一个常规视图,无需担心。
上面的代码在我的viewDidLoad()
中,我什至试图将其放在我的viewWillAppear
中,但它不起作用(仅适用于容器VC)。
我在这里寻找了很多解决方案,但没有任何效果:
我尝试添加loadView()
,并尝试创建一个函数,该函数包含我放在此处的代码的最后部分并从委托中调用它,还有很多其他内容,但是什么都没有...
我阅读了有关viewWillAppear的Apple开发人员文档,发现:
如果视图控制器是由弹出窗口内部的视图控制器提供的,则在关闭所提供的控制器后,不会在呈现的视图控制器上调用此方法。
所以我想这是行不通的,因为更改容器背景,就像用委托方法更改backgroundVC的背景一样:由于它位于同一vc中,因此将不起作用。
请注意,当我关闭应用程序并重新打开它时,背景会发生变化。