我有一个UICollectionView的标题。此标头包含UILabel。我通过委托调用函数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块来更改其中的标签文本,但仍然没有变化。
UpdateClue函数通过协议委派从另一个类触发。
extension PuzzleViewController: WordTileDelegate {
func relaySelectedWordId(wordId: String!) {
selectableTiles.updateTileHeaderClue(wordId: wordId)
}
}
感谢。
更新: 我已经弄清楚发生了什么。每次选择新单元格时都会创建此子视图。调查为什么会发生这种情况。将很快更新。
我遇到的问题是由于此细胞类被多次初始化。我相信我看到的标签不是当前正在更新的标签,而是之前实例化的标签。我有一个新问题,但如果我无法解决这个问题,我可能会提出一个问题。
答案 0 :(得分:0)
你有两个UILabel和/或两个LetterTileHeaders。您正在更新的是而不是屏幕上显示的那个。
证明这一点的一种方法是在let label = UILabel()
之后的行上设置断点。断点很可能不止一次被击中。
另一种方法是查看调试器中的屏幕布局并找到显示的UILabel的内存位置,然后在updateClue
方法中放置一个断点,并将该标签的内存位置与正在屏幕上显示。
答案 1 :(得分:0)
关注代码似乎是错误的,这意味着每次使用clueLble时它都会给你新鲜的UILable实例。
var clueLabel: UILabel = {
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 16)
label.text = "HELLO"
label.textColor = UIColor.white
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
尝试这样做:
只需将上面的代码替换为
var clueLabel = UILabel()
添加以下功能:
override func awakeFromNib() {
super.awakeFromNib()
label.font = UIFont.systemFont(ofSize: 16)
label.text = "HELLO"
label.textColor = UIColor.white
label.translatesAutoresizingMaskIntoConstraints = false
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
}
删除setupViews()