如何使用委托从另一个视图重新加载视图?

时间:2019-07-28 23:00:48

标签: swift uiview delegates

我有一个vc,可以在其中更改应用程序的背景颜色。
每次按下按钮时,VC的所有背景都会更改,容器VC除外。我想那是因为它在某种程度上包含了后台菜单。
您可以从侧面菜单访问后台vc。

enter image description here

我在后台菜单中使用的代码如下:

 @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中,因此将不起作用。

请注意,当我关闭应用程序并重新打开它时,背景会发生变化。

在关闭并重新打开应用程序时,是否可以调用一种方法来刷新容器视图?

0 个答案:

没有答案