override func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {let cell = tableView.dequeueReusableCell (withIdentifier: "cell", for: indexPath)
let customerNameLabel = UILabel()
customerNameLabel.frame = CGRect (x: 10, y: 5, width: 150, height: 40)
customerNameLabel.textColor = .black
customerNameLabel.text = "Customer Name\ (indexPath.row)"
cell.contentView.addSubview(customerNameLabel)
return cell
}
尝试向单元格添加标签时,即使在滚动tableView时也会添加多次,但我只需要添加一次标签并重复使用
答案 0 :(得分:2)
您需要创建自定义UITableViewCell并向其添加标签。
因为在您提供的代码中,每次重复使用单元格时,您都会向单元格添加UILabel()。
答案 1 :(得分:1)
您需要为UITableViewCell
awakeFromNib
并将标签添加到awakeFromNib
方法中的单元格。init(style: UITableViewStyle)
并将标签添加到init(style: UITableViewStyle)
方法中的单元格。答案 2 :(得分:0)
这是因为每次滚动或重新加载tableView时,TableView都会调用cellForRowAt
。
要么子类UITableViewCell
并在那里添加标签,要么每次添加标签之前都必须删除标签。
答案 3 :(得分:0)
由于UITableViewCell
的可重复使用行为,标签会在单个单元格中多次添加,因为如果要在单元格上添加单个标签,则必须首先检查该单元格是否已经先检查加入。
我们经常使用的是:
1)我们制作一个单元格的.xib并重复使用它:
2)我们在故事板中创建单元格并将特定标识符提供给单元格并重复使用它:
3)您可以检查标签是否已添加:
var customerNameLabel:UILable? = nil
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) {
if customerNameLabel == nil {
customerNameLabel = UILabel()
customerNameLabel.frame = CGRect(x: 10, y: 5, width: 150, height: 40)
customerNameLabel.textColor = .black
cell.contentView.addSubview(customerNameLabel)
}
customerNameLabel.text = "Customer Name\(indexPath.row)"
return cell
}
答案 4 :(得分:0)
几个简单的步骤:
awakeFromNib
(覆盖此方法)加载时,将标签添加到init(style:reuseIdentifier:)
内的contentView(覆盖此方法)。或者,您可以在nib本身的Storyboard中设置单元格布局。tableView:cellForRow
中将标签的文字设置为您想要的任何内容。