UITableviewcell 是错误的数据

Posted

技术标签:

【中文标题】UITableviewcell 是错误的数据【英文标题】:UITableviewcell is wrong data 【发布时间】:2021-05-02 05:55:11 【问题描述】:

我创建了一个自定义 UITableViewCell,该单元格有两个 UITableView。 他们每个人都有 UITableViewCell。像这样

查看 UITableView --(WrapTableView) UITableViewCell 堆栈视图 UITableView --(InformationTableView) UITableViewCell UITableView --(ItemTableView) UITableViewCell

而我的代码是这样的,

class MyViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 
  @IBOutlet weak var wrapTableView: UITableView!
  // ... //
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
          guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
                  as? WrapTableViewCell else 
              return UITableViewCell()
                
          cell.setup()
          return cell
      
  


class WrapTableViewCell: UITableViewCell 
    @IBOutlet weak var informationTableView: UITableView!
    @IBOutlet weak var itemTableView: UITableView!
    
    let informationTableViewDelegate = InformationTableViewDelegate()
    let itemTableViewDelegate = itemTableViewDelegate()
   
    func setup()
      self.informationTableView = informationTableViewDelegate
      self.itemTableView = itemTableViewDelegate
    

    override func prepareForReuse() 
      //...
      //What should I write?
      ...//
    


class InformationTableViewDelegate: NSObject, UITableViewDataSource, UITableViewDelegate 
   guard let cell = tableView.dequeueReusableCell(withIdentifier: InformationTableViewDelegateCell.identifier) as? InformationTableViewDelegateCell else 
            return UITableViewCell()
                
   cell.setup(text: text)
   return cell



class ItemTableViewDelegate: NSObject, UITableViewDataSource, UITableViewDelegate 
   guard let cell = tableView.dequeueReusableCell(withIdentifier: ItemTableViewDelegateCell.identifier) as? ItemTableViewDelegateCell else 
            return UITableViewCell()
                
   cell.setup(itemPrice: itemPrice)
   return cell



class InformationTableViewDelegateCell: UITableViewCell 
    @IBOutlet weak var itemNameLabel: UILabel!

    func setup(text:String)
       self.itemNameLabel.text = text
    

    override func prepareForReuse() 
      //...
      //What should I write?
      ...//
    


class ItemTableViewDelegateCell: UITableViewCell 
    @IBOutlet weak var itemPriceLabel: UILabel!

    func setup(itemPrice:String)
       self.itemPriceLabel.text = itemPrice
    

    override func prepareForReuse() 
      //...
      //What should I write?
      ...//
    


我的问题是,在滚动过程中,旧单元格仍然显示。 我了解我必须使用 prepareForReuse 方法重置旧数据才能重置所有日期。 但是,就我而言,我不知道在每个 prepareForReuse() 方法中要写什么,因为例如 WrapTableViewCell 的属性不像 image 或 Label,尽管在这些情况下 image.image = nil或 label.text = "" 已应用,但类似于 IBOutlet 附加的表格视图 谢谢

【问题讨论】:

“我知道我必须使用 prepareForReuse 方法重置旧数据才能重置所有日期。”你可能理解错了。关注的方法是 UITableViewDataSource 方法,尤其是cellForRow。您的单元设置需要是或伴随着一个配置方法,用于配置单元的所有内容 【参考方案1】:

无需使用 prepareForReuse 方法。您需要重新加载数据才能传递给表格视图

【讨论】:

以上是关于UITableviewcell 是错误的数据的主要内容,如果未能解决你的问题,请参考以下文章

保存 UITableviewcell accessoryView 的状态

如何强制释放 UITableViewCell

仅为 UITableViewCell 的一部分调用 didSelectRowAtIndexPath

dequeueReusableCellWithIdentifier、自定义 UITableViewCell 的问题

从 uitableviewcell 获取文本输入

使用带有原型单元的自定义 UITableViewCell