首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向UITableViewCell动态添加subViews

向UITableViewCell动态添加subViews
EN

Stack Overflow用户
提问于 2016-09-25 14:08:36
回答 1查看 432关注 0票数 0

我需要添加UILabels到UITableViewCell,但它是动态的,第一个单元格可以有1个标签,第二个可以有4个标签,我之前不知道。所以我试了一下

代码语言:javascript
复制
 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
    }

但是发生了什么,先前添加的视图没有被删除,并且它再次尝试添加新视图。

所以我想知道,做这件事的有效方法是什么。其次,我错在哪里。

关于Ranjit

EN

回答 1

Stack Overflow用户

发布于 2016-09-26 04:22:45

您将使用commentViewsAddedDict来确定是否已经添加了行。但是这些标签是否被添加并不是表中行的函数,而是被重用的单元格的函数。

所以,我的建议是:

  • 消除了此commentViewsAddedDict逻辑;而
  • 移动了有关已向ReviewTableViewCell.

添加了多少标签的逻辑

因此,您可能会得到以下结果:

代码语言:javascript
复制
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

代码语言:javascript
复制
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决定是否需要添加标签、更新现有标签或删除此特定reviewObject不需要的任何标签。但是所有这些“标签状态”逻辑都是单元格(可以重用)的函数,而不是单元格对应于表中哪一行的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39683959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档