【发布时间】:2016-02-08 00:57:59
【问题描述】:
我将数据传递给自定义 UITableViewCell 并根据该数据显示或隐藏动态添加的子视图。我正在重用在情节提要中创建的单元格。一切都按预期工作,直到某些单元格被重用,例如在滚动时它将“随机”隐藏或显示动态添加的子视图。
我需要什么
我需要一种通过方法(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
}
【问题讨论】:
-
你看过
prepareForReuse()了吗? -
我确实做到了,但我正在寻找一个不重新创建子视图的解决方案,如果有的话。因为在我看来,重用时重新创建它似乎有点不必要。
-
你可以做的是懒惰地创建子视图并在
prepareForReuse检查它是否存在并隐藏它。我认为 SwiftArchitect 的解释应该足够了,但如果你仍然需要帮助,我可以告诉你如何做。 -
谢谢大家,非常感谢您的帮助,我现在正在使用 prepareForReuse。祝你有个愉快的夜晚。
标签: ios swift uitableview