UIView 背景颜色没有改变?

Posted

技术标签:

【中文标题】UIView 背景颜色没有改变?【英文标题】:UIView Background Color Not Changing? 【发布时间】:2018-06-16 21:44:24 【问题描述】:

当我运行我的应用程序时,背景颜色没有调整。颜色编号是一个全局变量。在 AppDelegate.swift 中,它被初始化为值为 0。应用程序运行时,第一次调用 ViewWillAppear,值为 0。它在 ViewController 出现时调用。接下来,在 colorNumber 变量更改为 2 后再次运行 viewWillAppear(因为它在 DidFinishLaunchingWithOptions 中调用)。程序进入第二个条件(因为它正确打印出“我们处于第二个条件”)。但是,背景颜色保持绿色。为什么背景颜色不会变成蓝色?谢谢。

ViewController.swift:

var colorNumber: Int!

class ViewController: UIViewController 

    func setInitialColor() 
        if colorNumber! == 1 
            self.view.backgroundColor = .green
            print("We're in the First Condition")
        
        else if colorNumber! == 2 
            self.view.backgroundColor = .blue
            print("We're in the second condition")
        
    

    override func viewWillAppear(_ animated: Bool) 
        self.setInitialColor()
    

AppDelegate.swift:

func application(_ application: UIApplication, 
didFinishLaunchingWithOptions launchOptions: 
[UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    colorNumber = 0
    colorNumber = 1
    ViewController().viewWillAppear(false)

【问题讨论】:

永远不要自己调用viewWillAppear(或任何其他视图控制器生命周期方法)。时机成熟时会调用它。 【参考方案1】:

您永远不应该自己调用 lifeCycle 方法。因此,您可以调用设置属性的方法或调用setInitalColor(),而不是调用viewWillAppear()

您真正的问题是您在此语句中创建了ViewController 的第二个实例:

ViewController().viewWillAppear(false)

这与屏幕上的ViewController 不同。相反,您可以向window 询问其rootViewController,然后致电setInitialColor()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

    colorNumber = 2

    let vc = window?.rootViewController as? ViewController
    vc?.setInitialColor()  // color is now blue!

    return true

【讨论】:

那个方法奏效了!我已经更新了我的帖子以展示对我有用的内容。 你需要让你的问题保持原样,这样整个问题和答案才有意义。

以上是关于UIView 背景颜色没有改变?的主要内容,如果未能解决你的问题,请参考以下文章

像这样改变 UIView 的背景颜色 *FFFFFF*

CAGradientLayer 不改变背景颜色

在loadView中设置UIView背景颜色没有效果

使用动画更改 UIView 背景颜色

MacOS-MacAPP的NSView改变背景颜色

设置 UIVIew 的背景颜色