我将数据传递到自定义UITableViewCell,并根据我想要显示或隐藏动态添加的子视图的数据。我正在重用在故事板中创建的单元格。一切都按预期工作,直到一些细胞被重复使用,例如在滚动它时将随机地#34;隐藏或显示动态添加的子视图。
我需要什么
我需要一种方法来通过方法(setData)设置单元格的数据,添加动态创建的子视图,同时允许重用单元格而不会在其外观中产生毛刺,特别是添加的子视图以及单元格状态。
问题
我不知道应该在哪里创建子视图,因此在重复使用单元格时不必重新创建它,因此当我想要隐藏或显示它时它不会出错在setData方法中。在创建新的子视图时也可以访问IBOutlet storyboardLabel。
CustomTableViewCell
class CustomTableViewCell : UITableViewCell {
var data: DataItem?
var customSubview: UIView?
@IBOutlet weak var storyboardLabel: UILabel!
//setting the data of a cell and adding the subview
func setData(DataItem data) {
// adding the view
let customSubview = UIView.init(...)
customSubview.bounds = storyboardLabel.bounds
customSubview.hidden = data.showSubview
self.contentView.addSubview(customSubview)
}
}
添加单元格
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("storyboardTableCell") as! CustomTableViewCell
cell.setData(self.data[indexPath.section][indexPath.row] as! DataItem)
return cell
}
答案 0 :(得分:0)
所有内容都按预期工作,直到某些单元格被重用...
没有任何工作符合预期:您正在向缓存的UITableViewCell
添加对象,当然,当您在后续cellForRowAtIndexPath
上再次传递该缓存单元时,您正在添加新对象。 / p>
考虑在 IB 中使用一组视图,每个视图都满足您的单元格组织,从而以编程方式保存添加子视图。
你需要清理你的牢房。
cellForRowAtIndexPath
中添加的所有内容
tags
和viewWithTag
prepareForReuse()
您可以在this Stack Overflow post上找到一个示例(以及类似的讨论)。