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

时间:2017-11-02 10:16:30

标签: swift uitableview

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时也会添加多次,但我只需要添加一次标签并重复使用

5 个答案:

答案 0 :(得分:2)

您需要创建自定义UITableViewCell并向其添加标签。

因为在您提供的代码中,每次重复使用单元格时,您都会向单元格添加UILabel()。

答案 1 :(得分:1)

您需要为UITableViewCell

创建一个子类
  • 如果您从xib文件加载单元格,请覆盖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)

几个简单的步骤:

  1. 子类UITableViewCell。
  2. 如果以编程方式生成单元格,则从nib OR awakeFromNib(覆盖此方法)加载时,将标签添加到init(style:reuseIdentifier:)内的contentView(覆盖此方法)。或者,您可以在nib本身的Storyboard中设置单元格布局。
  3. tableView:cellForRow中将标签的文字设置为您想要的任何内容。