设置功能无法在viewController中更改backgroundColor

时间:2019-01-30 16:41:51

标签: ios swift viewdidappear ios-lifecycle

我实际上是用它来从ViewController切换到另一个

    let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "addhoraire") as! Addhoraire
    self.present(vue, animated: true, completion: nil)

有时我想在向用户显示视图之前进行一些更改,因此在VC中,我会执行func。这样

// header and cercle.exemple are outlets of a UIView
    public func setup(selectedDay : String){
        loadViewIfNeeded()
        self.selectedDay = selectedDay
        print("jour selectionné : " + self.selectedDay)
        self.header.backgroundColor = UIColor.brown
        self.profTextField.backgroundColor = UIColor.yellow
        self.cercleExemple.backgroundColor = UIColor.yellow
    }

当我现在要切换时,我要做:

    let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "addhoraire") as! Addhoraire
    vue.setup(selectedDay: selectedDayinHoraire)
    self.present(vue, animated: true, completion: nil)

因此它将切换新的VC并执行我想要的设置,文本字段的颜色也将更改,cercleExemple也将更改,但标头将不会更改。 view.backgroundColor,同样的问题……但是,如果我在同一位置执行header.isHidden = true,则可以正常工作。所以它只是拒绝改变颜色

标题和视图bgcolor仅在ViewDidAppear中发生变化。我不明白为什么。自从我发现这个错误以来已经过去了一个星期,这让我发疯了...

3 个答案:

答案 0 :(得分:0)

您试图在视图加载之前进行设置,将需要设置的信息保存在变量中并在setup中进行设置,并在调用viewDidLoad时,从这些变量中设置信息

答案 1 :(得分:0)

正如Adrian所述,您需要等到视图加载后才能对其进行更改。您是否尝试过在视图控制器中覆盖viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()

    // Do stuff here
    self.header.backgroundColor = UIColor.brown
    // ...additional view configuration
}

如果您无法在viewDidLoad()中进行此操作,也可以尝试使用viewWillAppear()方法进行UI更改,而不必等到viewDidAppear()

答案 2 :(得分:0)

我找到了问题,但我不知道根本原因。这似乎是一个Apple错误。之所以发生此问题,是因为您在情节提要中使用Assets.xcassets目录(LightSideMenu)中的颜色设置标题的背景颜色。如果不是使用Assets.xcassets滑块或通过输入十六进制值RGB来手动设置标题的背景颜色,而是使用#2A6D9E滑块来设置标题的背景颜色,则标题的背景颜色将被覆盖。另外,请确保您未在​​viewWillAppearviewDidAppear之类的其他地方重置它,因为这些将在您的func setup(selectedDay : String)方法之后调用。

enter image description here