如何将子视图添加到所有 UITable 单元格
How to add a subView to all UITable Cells
不使用故事板。
我正在尝试向任何未填充值的单元格添加错误标签 out/saved。我得出结论,我不需要显示此逻辑,问题是在 all/more 中显示的错误标签多于一个 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
基于此示例,我希望在所有单元格上显示一个红色圆圈,但它却显示在最后一个单元格上。为什么?
这里有一些错误:
- 您应该只添加到单元格 contentView。 (https://developer.apple.com/documentation/uikit/uitableviewcell/1623229-contentview)
示例:
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
}
不使用故事板。
我正在尝试向任何未填充值的单元格添加错误标签 out/saved。我得出结论,我不需要显示此逻辑,问题是在 all/more 中显示的错误标签多于一个 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
基于此示例,我希望在所有单元格上显示一个红色圆圈,但它却显示在最后一个单元格上。为什么?
这里有一些错误:
- 您应该只添加到单元格 contentView。 (https://developer.apple.com/documentation/uikit/uitableviewcell/1623229-contentview)
示例:
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
}