动态地将子视图添加到UITableViewCell

时间:2016-09-25 06:08:36

标签: swift uitableview uistackview

我需要将UILabel添加到UITableViewCell,但是它的动态,第一个单元格可以有1个标签,第二个可以有4个,我手头都不知道。所以我尝试了这个

 func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell {

        let cell: ReviewTableViewCell = reviewTableView.dequeueReusableCell(withIdentifier: "Review", for: indexPath) as! ReviewTableViewCell

        var reviewObj:Review!

        reviewObj = reviewArray[(indexPath as NSIndexPath).row]


        let viewsAdded = commentViewsAddedDict[indexPath.row]

        if(viewsAdded == nil)
        {
            for comment in reviewObj.commentArray
            {
                let label1 = UILabel()
                label1.text = “text1”
                label1.textColor =  UIColor(hexString: "#333333")

                let label2 = UILabel()
                label2.text =  “text2”
                label2.numberOfLines = 0
                label2.sizeToFit()
                label2.textColor =  UIColor(hexString: "#666666")

                let label3 = UILabel()
                label3.text = "----------------------------------------------------------------------"
                label3.textColor =  UIColor(hexString: "#eeeeee")


                cell.stackView1.addArrangedSubview(label1)
                cell.stackView1.addArrangedSubview(label2)
                cell.stackView1.addArrangedSubview(label3)
            }

             commentViewsAddedDict[indexPath.row] = true
        }

        return cell
    }

但是会发生什么,以前添加的视图不会被删除,它会再次尝试添加新视图。

所以我想知道,有效的方法是什么。 其次,我出错了。

此致 兰吉特

1 个答案:

答案 0 :(得分:0)

您正在使用i>0来确定是否添加了行。但是这些标签是否被添加不是表格中行的功能,而是单元格的功能,可以重复使用。

所以,我会建议:

  • 消除此commentViewsAddedDict逻辑;以及

  • 移动有关已添加到commentViewsAddedDict的标签数量的逻辑。

所以,你最终会得到:

ReviewTableViewCell

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell { let cell = reviewTableView.dequeueReusableCell(withIdentifier: "Review", for: indexPath) as! ReviewTableViewCell var reviewObject = reviewArray[(indexPath as NSIndexPath).row] cell.updateLabels(for: reviewObject) return cell }

ReviewTableViewCell

由于问题中提供的代码段不清楚,因此func updateLabels(for reviewObject: ReviewObjectType) { // add label if needed // update label `text` if needed // remove any labels that need to be removed } 中的逻辑有点难以具体说明,但基本的想法是updateLabels应该跟踪其标签是否有是否已添加,并在ReviewTableViewCell的基础上,决定是否需要添加标签,更新现有标签或删除此特定reviewObject不需要的任何标签。但是所有这些“标签状态”逻辑都是单元格的函数(可以重复使用),而不是单元格对应的表格中的哪一行。