gpt4 book ai didi

ios - viewDidLoad 中的快速设置属性不起作用,但在 viewDidAppear 中有效

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:00:35 24 4
gpt4 key购买 nike

最新的 XCode。我有一个项目,其中在任何 Storyboard/ View Controller 中设置属性,例如 textColorUILabelbackgroundColorUIButtonviewDidLoad不工作但在 viewDidAppear 中工作.

让我受不了的是我无法在新的/不同的简单项目中重现它。

任何人都知道什么可能是错的?这是一个大工程。重新创建它会是一团糟。我有一种感觉,这是无法解决的。请证明我错了。

抱歉,没有太多代码可以展示:

@IBOutlet weak var theTextField: UITextField!
@IBOutlet weak var theLabel: UILabel!
@IBOutlet weak var theButton: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
theTextField.text = "some text" //<<<- works
theTextField.textColor = UIColor.red //<<<- works
theLabel.textColor = UIColor.red //<<<- **doesn't work**
theButton.backgroundColor = UIColor.red //<<<- **doesn't work**
theButton.setTitleColor(UIColor.blue, for: UIControl.State.normal) //<<<- works

}
override func **viewDidAppear**(_ animated: Bool) {
super.viewDidAppear(animated)
theTextField.text = "some text" //<<<- works
theTextField.textColor = UIColor.red //<<<- works
theLabel.textColor = UIColor.red //<<<- **works**
theButton.backgroundColor = UIColor.red //<<<- **works**
theButton.setTitleColor(UIColor.blue, for: UIControl.State.normal) //<<<- works
}

此处 theTextField 在所有情况下都可以正常更新,但标签和按钮不会在“viewDidLoad”中更新。

编辑:更新代码以显示某些功能有效而其他功能无效

编辑 2:使用 viewDidAppear 时出现问题是屏幕显示了一组颜色(在设计师中指定),但随后所有颜色都在用户面前切换 - 这看起来很难看。任何形式的延误都无济于事。目标是在动画显示之前用所有颜色等“准备”屏幕。而这些颜色依赖于一些动态数据,无法在设计器中指定。

编辑 3:我只是想在 viewDidLayoutSubviews 中完成所有这些工作得到我想要的:

@IBOutlet weak var theTextField: UITextField!
@IBOutlet weak var theLabel: UILabel!
@IBOutlet weak var theButton: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
theTextField.text = "some text" //<<<- works
theTextField.textColor = UIColor.red //<<<- works
theLabel.textColor = UIColor.red //<<<- doesn't work
theButton.backgroundColor = UIColor.red //<<<- doesn't work
theButton.setTitleColor(UIColor.blue, for: UIControl.State.normal) //<<<- works

}
override func viewDidLayoutSubviews() {
super.viewDidAppear()
theTextField.text = "some text" //<<<- works
theTextField.textColor = UIColor.red //<<<- works
theLabel.textColor = UIColor.red //<<<- works
theButton.backgroundColor = UIColor.red //<<<- works
theButton.setTitleColor(UIColor.blue, for: UIControl.State.normal) //<<<- works
}

似乎是一个可行的解决方法。但为什么?为什么我需要求助于解决方法?我真的很想明白为什么viewDidLoad在我的这个特定案例/项目中不起作用。或者这不是解决方法和正确的方法吗?我在所有示例代码中看到的每个地方,每个人都总是在 viewDidLoad 中进行所有此类初始化。 .我从未见过有人在 viewDidLayoutSubviews 中这样做过或 viewDidAppear .我看的时间还不够长吗?我错过了什么?

最佳答案

没有错。它在执行代码之前呈现标签。试试下面的代码,它会起作用

@IBOutlet weak var theLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(4), execute: {
theLabel.textColor = UIColor.red
})
}

关于ios - viewDidLoad 中的快速设置属性不起作用,但在 viewDidAppear 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com