setup func 无法更改 viewController 中的 backgroundColor
setup func can't change backgroundColor in a viewController
我实际上是用它从 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 也已更改,但 header 不会。 view.backgroundColor
,同样的问题......但如果我在同一个地方做 header.isHidden = true 它工作。所以它只是拒绝改变颜色
header 和视图 bgcolor 仅在 ViewDidAppear
中发生变化。我不明白为什么。自从我发现这个错误已经一个星期了,它让我发疯......
您正在尝试在视图加载之前设置视图,将需要设置的信息保存在变量中并在 setup
中设置,然后在 viewDidLoad
被调用时,设置来自那些变量。
正如 Adrian 提到的,您需要等到视图加载后再对其进行更改。您是否尝试过在您的视图控制器中覆盖 viewDidLoad()
?
override func viewDidLoad() {
super.viewDidLoad()
// Do stuff here
self.header.backgroundColor = UIColor.brown
// ...additional view configuration
}
如果您无法在 viewDidLoad()
中执行此操作,您也可以尝试在 viewWillAppear()
方法中进行 UI 更改,而不是等到 viewDidAppear()
。
我发现了问题,但不知道根本原因。这似乎是一个 Apple
错误。出现此问题是因为在 Storyboard 中您使用 Assets.xcassets
目录 (LightSideMenu
) 中的颜色设置页眉的背景颜色。如果不是从 Assets.xcassets
中选择颜色,而是使用 RGB
滑块或输入十六进制值 #2A6D9E
手动设置页眉的背景颜色,那么页眉的背景颜色将 不被覆盖。另外,请确保您没有在 viewWillAppear
或 viewDidAppear
等其他地方重置它,因为它们将在您的 func setup(selectedDay : String)
方法之后调用。
我实际上是用它从 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 也已更改,但 header 不会。 view.backgroundColor
,同样的问题......但如果我在同一个地方做 header.isHidden = true 它工作。所以它只是拒绝改变颜色
header 和视图 bgcolor 仅在 ViewDidAppear
中发生变化。我不明白为什么。自从我发现这个错误已经一个星期了,它让我发疯......
您正在尝试在视图加载之前设置视图,将需要设置的信息保存在变量中并在 setup
中设置,然后在 viewDidLoad
被调用时,设置来自那些变量。
正如 Adrian 提到的,您需要等到视图加载后再对其进行更改。您是否尝试过在您的视图控制器中覆盖 viewDidLoad()
?
override func viewDidLoad() {
super.viewDidLoad()
// Do stuff here
self.header.backgroundColor = UIColor.brown
// ...additional view configuration
}
如果您无法在 viewDidLoad()
中执行此操作,您也可以尝试在 viewWillAppear()
方法中进行 UI 更改,而不是等到 viewDidAppear()
。
我发现了问题,但不知道根本原因。这似乎是一个 Apple
错误。出现此问题是因为在 Storyboard 中您使用 Assets.xcassets
目录 (LightSideMenu
) 中的颜色设置页眉的背景颜色。如果不是从 Assets.xcassets
中选择颜色,而是使用 RGB
滑块或输入十六进制值 #2A6D9E
手动设置页眉的背景颜色,那么页眉的背景颜色将 不被覆盖。另外,请确保您没有在 viewWillAppear
或 viewDidAppear
等其他地方重置它,因为它们将在您的 func setup(selectedDay : String)
方法之后调用。