我有UITableViewCell
,我在xib
方法中添加了cellForRowIndexPath
。它工作正常,直到我更新模型并在UITableView
上调用reloadData。单元格在旧数据之上显示新数据,我可以看到旧标签文本上的标签。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let customView:CustomView = UIView.fromNib()
userView.frame = CGRect(x: 10, y: y, width: Int(self.tableView.bounds.size.width-50), height: 50)
userView.label.text = data[indexPath.row]
cell.addSubview(customView:)
有没有猜到为什么会发生这种情况?
答案 0 :(得分:1)
快速回答如下:由于单元格在出列时会被重复使用,因此您在向先前出列时已添加CustomView
的单元格中添加新的CustomView
。
您可以处理此问题的一种方法是从层次结构中删除任何现有的CustomView
,然后再创建新的//Remove existing view, if it exists
if let existingView = cell.viewWithTag(999) {
//A view was found - so remove it.
existingView.removeFromSuperview()
}
let customView: CustomView = UIView.fromNib()
//Set a tag so it can be removed in the future
customView.tag = 999
customView.frame = CGRect(x: 10, y: y, width: Int(self.tableView.bounds.size.width-50), height: 50)
customView.label.text = data[indexPath.row]
cell.addSubview(customView)
并添加它。为此,您可以每次向视图添加一个可识别的标记,然后在您的出列过程中查找具有相同标记的视图,如下所示:
UICollectionViewCell
对我而言,这感觉有点矫枉过正,因为看起来您应该将自定义视图添加到自定义otp.groupby(otp['Orig','Dest'])
,因此您实际上并不是在动态创建自定义单元格,但这只是我。如果您这样做,您可以简单地将自定义单元格出列并在标签上设置文本,而无需始终向层次结构添加更多视图。