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

标签 swift uitableview swift4 swift4.2

不使用 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/

相关文章:

ios - AlamofireObjectMapper 如何映射对象?

ios - 我如何从我的表格 View 中删除空单元格

uitableview - iOS : label stops updating when user scrolls through table view

ios - 自动调整大小的 tableView 高度错误

ios - 快速创建单独的计时器

ios - 如何在 iOS 中检查文本是否被选中以及十字按钮是否被按下?

ios - 用户是否有权访问 iOS 沙箱中的文档目录?

swift - 如何仅以编程方式将控件添加到 tableview 单元格一次

swift4 - 将应用程序升级到 Swift 4 和 iOS 11 - TwitterKit 问题

ios - Swift 4 - UITextfield 边框半径颜色问题