堆栈视图在表视图单元格中

时间:2016-09-23 12:02:48

标签: ios swift uitableview uistackview

我正在尝试以编程方式在表格视图单元格中实现堆栈视图,并像这样添加标签和按钮:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let dict = self.char[indexPath.row]
    let stackView = UIStackView()
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.axis = .horizontal
    stackView.spacing = 20
    stackView.distribution = .fillProportionally
    stackView.alignment = .leading
    cell.addSubview(stackView)
    NSLayoutConstraint.activate([
        stackView.leadingAnchor.constraint(equalTo: cell.leadingAnchor),
        stackView.trailingAnchor.constraint(equalTo: cell.trailingAnchor)
        ])
    let bornLabel = UILabel()
    bornLabel.textColor = UIColor.blue
    let bornLabelValue = UILabel()
    bornLabelValue.textColor = UIColor.blue
    stackView.addArrangedSubview(bornLabel)
    stackView.addArrangedSubview(bornLabelValue)
    for (key, value) in dict {
        bornLabel.text = key
        bornLabelValue.text = value
        if key == "Height" {
            let button = UIButton(type: .roundedRect)
            button.setTitle("English", for: .normal)
            button.setTitleColor(.blue, for: .normal)
         stackView.addArrangedSubview(button)
        }
    }
    return cell
}

问题是每次调用tableView.reloadData()时,另一个单元格会添加到现有的单元格之上,每个标签的值都不同,具体取决于给予tableView的数据。或者它可能不会每次生成另一个单元格,而只是添加另一个堆栈视图。我不确定。我该如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:3)

问题在于您获得了一个" 可重复使用的单元格",这意味着它在前几次是一个空单元格,然后它将是您已添加UIStackView

的单元格

您应该通过Storyboard或新的XIB文件创建一个新的原型单元格,在其中添加UIStackView,然后仅在{{1}中配置该stackView实施。

或者你可以从技术上在stackView中设置一个标签,然后检查该标签的单元格......但请不要这样做。

答案 1 :(得分:1)

尝试在 cell.contentView

中添加stackView

我是客观的C人,所以很快就学会了。

在Objective C中,我们检查条件,如果在实例化之前单元格是否为零。

离。

if(cell == nil)
{
   # Instantiate cell here
}

此单元格不会为indexPath的每一行实例化。