我需要添加UILabels到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
}但是发生了什么,先前添加的视图没有被删除,并且它再次尝试添加新视图。
所以我想知道,做这件事的有效方法是什么。其次,我错在哪里。
关于Ranjit
发布于 2016-09-26 04:22:45
您将使用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决定是否需要添加标签、更新现有标签或删除此特定reviewObject不需要的任何标签。但是所有这些“标签状态”逻辑都是单元格(可以重用)的函数,而不是单元格对应于表中哪一行的函数。
https://stackoverflow.com/questions/39683959
复制相似问题