0

我实际上使用它从​​ 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. 我不明白为什么。自从我遇到这个错误以来已经一周了,这让我发疯......

4

3 回答 3

0

我找到了问题,但我不知道根本原因。这似乎是一个Apple错误。Assets.xcassets出现此问题是因为在 Storyboard 中,您使用目录 ( LightSideMenu)中的颜色设置标题的背景颜色。如果您不使用滑块或通过输入十六进制值Assets.xcassets手动设置标题的背景颜色,而不是从中选择颜色,那么您的标题的背景颜色将不会被覆盖。另外,请确保您没有在其他地方重置它,或者因为这些将在您的方法之后调用。RGB#2A6D9EviewWillAppearviewDidAppearfunc setup(selectedDay : String)

在此处输入图像描述

于 2019-01-30T22:21:05.817 回答
0

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

于 2019-01-30T16:47:14.147 回答
0

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

override func viewDidLoad() {
    super.viewDidLoad()

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

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

于 2019-01-30T18:15:32.970 回答