我需要将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
}
但是会发生什么,以前添加的视图不会被删除,它会再次尝试添加新视图。
所以我想知道,有效的方法是什么。 其次,我出错了。
此致 兰吉特
答案 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
不需要的任何标签。但是所有这些“标签状态”逻辑都是单元格的函数(可以重复使用),而不是单元格对应的表格中的哪一行。