如何将subView添加到所有UITable单元格

时间:2019-02-06 17:46:21

标签: swift uitableview swift4 swift4.2

不使用情节提要。

我正在尝试将错误标签添加到未填写/保存值的任何单元格中。我得出的结论是,我不需要展示这种逻辑,问题是在所有/多个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 个答案:

答案 0 :(得分:1)

这里有些错误:

  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
}