不使用情节提要。
我正在尝试将错误标签添加到未填写/保存值的任何单元格中。我得出的结论是,我不需要展示这种逻辑,问题是在所有/多个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
基于此示例,我希望所有单元格上都显示一个红色圆圈,但在最后一个单元格上会显示一个红色圆圈。为什么?
答案 0 :(得分:1)
这里有些错误:
示例:
cell.contentView.addSubview(myLabel)
更好的重用是将您的标签添加一次。 这可以在界面生成器或init或awakeFromNib中完成。这样的重用将更加有效。
这是您看到的主要问题:
您一次又一次添加一个静态标签。
含义:因为只有一个标签(:
最好使用函数创建标签(工厂函数)
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
}