gpt4 book ai didi

swift - 如何将 subview 添加到所有 UITable 单元格

转载 作者:行者123 更新时间:2023-11-28 13:51:26 26 4
gpt4 key购买 nike

不使用 Storyboard。

我正在尝试向任何未填写/保存值的单元格添加错误标签。我得出结论,我不需要显示此逻辑,问题是在所有/多个 tableView 的单元格中显示多个错误标签。

我创建了这个 viewLabel 以供重用:

struct Label {
static let errorLabel: UILabel = {
let label = UILabel()
label.frame = CGRect(x: 0, y: 0, width: 18, height: 18)
label.text = "!"
label.layer.cornerRadius = label.frame.height / 2
label.backgroundColor = UIColor.red
label.translatesAutoresizingMaskIntoConstraints = false
label.textAlignment = .center
label.textColor = UIColor.white
label.font = UIFont(name: "CircularStd-Black", size: 14)
label.clipsToBounds = true
return label
}()
}

在 cellForRowAt 内部:

// I'm using detailTextLabel
let cell = UITableViewCell(style: .value1, reuseIdentifier: cellId)
cell.addSubview(Label.errorLabel)
// [...] constraints for Label.errorLabel
return cell

基于此示例,我希望在所有单元格上显示一个红色圆圈,但它却显示在最后一个单元格上。为什么?

最佳答案

这里有一些错误:

  1. 您应该只添加到单元格 contentView。 ( https://developer.apple.com/documentation/uikit/uitableviewcell/1623229-contentview )

示例:

cell.contentView.addSubview(myLabel)
  1. 更好的重用方法是添加您的标签一次。这可以在界面构建器或 init 或 awakeFromNib 中完成。这样重用会更有效率。

  2. 这是您遇到的主要问题:

您一次又一次地添加一个静态标签。

意思:只有最后一个单元格会显示它,因为只有一个标签(:

最好使用一个函数来创建标签(工厂函数)

static func createLabel() -> UILabel {
let label = UILabel()
label.frame = CGRect(x: 0, y: 0, width: 18, height: 18)
label.text = "!"
label.layer.cornerRadius = label.frame.height / 2
label.backgroundColor = UIColor.red
label.translatesAutoresizingMaskIntoConstraints = false
label.textAlignment = .center
label.textColor = UIColor.white
label.font = UIFont(name: "CircularStd-Black", size: 14)
label.clipsToBounds = true
return label
}

关于swift - 如何将 subview 添加到所有 UITable 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54559643/

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