gpt4 book ai didi

ios - Swift UILabel subview 不更新

转载 作者:行者123 更新时间:2023-11-30 11:49:31 25 4
gpt4 key购买 nike

我有一个 UICollectionView 的标题。该 header 包含一个 UILabel。我通过委托(delegate)调用函数 updateClue 来更新标签的文本值。

class LetterTileHeader: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

var clueLabel: UILabel = {
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 16)
label.text = "HELLO"
label.textColor = UIColor.white
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()

func setupViews() {
backgroundColor = GlobalConstants.colorDarkBlue
addSubview(clueLabel)

clueLabel.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
clueLabel.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
clueLabel.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
clueLabel.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
}

func updateClue(clue: String) {
clueLabel.text = clue
debugLabel()
}

func debugLabel() {
print(clueLabel.text)
}

函数 debugLabel 正在打印来自 updateClue 的更改后的文本。但屏幕上的标签不会更新。我缺少什么?我尝试使用 DispatchQueue.main.async block 来更改其中的标签文本,但仍然没有变化。

UpdateClue 函数是通过协议(protocol)委托(delegate)从另一个类触发的。

extension PuzzleViewController: WordTileDelegate {
func relaySelectedWordId(wordId: String!) {
selectableTiles.updateTileHeaderClue(wordId: wordId)
}
}

谢谢。

更新:我已经弄清楚发生了什么事。每次我选择一个新单元格时都会创建此 subview 。调查为什么会发生这种情况。很快就会更新。

我遇到的问题是由于该单元类被初始化了多次。我相信我看到的标签不是当前正在更新的标签,而是实例化的上一个标签。我有一个新问题,如果我无法弄清楚,我可以提出一个问题。

最佳答案

您有两个 UILabel 和/或两个 LetterTileHeaders。您正在更新的不是屏幕上显示的。

证明这一点的一种方法是在 let label = UILabel() 之后的行上放置一个断点。很可能会多次命中断点。

另一种方法是查看调试器中的屏幕布局并找到正在显示的 UILabel 的内存位置,然后在 updateClue 方法中放置一个断点并比较该标签的内存位置到屏幕上显示的那个。

关于ios - Swift UILabel subview 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478073/

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