如何通过表格视图单元格中的 url 预览元数据?

Posted

技术标签:

【中文标题】如何通过表格视图单元格中的 url 预览元数据?【英文标题】:How to preview metadata via url in tableview cell? 【发布时间】:2021-10-11 20:45:28 【问题描述】:

我想通过 tableview 单元格中的 url 预览元数据,为此我使用 LinkPresantation。一切正常,但是当我滚动表格视图时,这些项目不断地相互交换位置。我找不到哪里出错了

这是我的 tableViewCell 代码:

    var urlString: String?

    var previewCell: LinkModel? 

    didSet 
  
        urlString = previewCell?.linkURL
    
        fetchPreview()
    


 let linkPreview = LPLinkView()
 var provideer = LPMetadataProvider()


 override init(frame: CGRect) 
     super.init(frame: frame)
contentView.backgroundColor = .black


 

fileprivate func fetchPreview() 

guard let url = URL(string: urlString ?? "") else return

provideer = LPMetadaProvider()
provideer.startFetchingMetadata(for: url)  metaData, error in

    guard let data = metaData, error == nil else 
        
    
        return
    
    DispatchQueue.main.async  
        self.linkPreview.metadata = data
        self.contentView.addSubview(self.linkPreview)
        self.linkPreview.frame = (self.contentView.bounds)
    


和 cellForRowAt :

  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    
    let listLinkCell = tableView.dequeueReusableCell(withIdentifier: LinkListCell.linkListCellID, for: indexPath) as! LinkListCell
    listLinkCell.selectionStyle = .none
    
    listLinkCell.previewCell = listLink[indexPath.row]
    listLinkCell.linkDelegate = self
    
    return listLinkCell

【问题讨论】:

不要把获取代码放在你的tableViewCell中。而是将所有数据提取到数组中,然后重新加载表。 实际上,这个事件对我来说似乎也不健康,但是当 LinkPreview 在 tableviewcell 中时,如何在控制器中重新加载它。我对此感到很困惑 这能回答你的问题吗? Async image loading from url inside a UITableView cell - image changes to wrong image while scrolling 我认为还有另一个问题。我尝试了这种方法,但同样的逻辑不适用于 Linkpresantation 【参考方案1】:

在您的 LinkListCell 类中尝试覆盖 prepeareForReuse 函数 - 以便将单元格重置为其默认状态。

override func prepareForReuse() 
    super.prepareForReuse()

    //set cell to initial state here 

    provideer.cancel()
    linkPreview.metadata = LPLinkMetadata()

【讨论】:

谢谢你的回答,不过我也遇到过这个功能,但是不知道怎么用。我到底应该在这个函数中写什么?我试过 linkView = LPLinkView 但它不起作用。 这里的想法是重置内容,这样它就不会从一个单元格“跳跃”到另一个单元格:) 在您重用它之前,您的单元格的某种临时模式,然后填充所需的数据。尝试将链接设置为 nil,或尝试从内容视图中删除链接预览。 linkPreview.removeFromSuperview() 要重置它,我第一次购买的是removeFromSuperView,但不幸的是它不起作用。 您可以尝试添加provideer.cancel(),然后添加linkPreview.metadata = LPLinkMetadata()吗?更新了我的答案。 线程 8:EXC_BAD_ACCESS(代码=1,地址=0x10)。 LPMetadaProvide_completedWithError:]_block_invoke.451 它给出了这个错误。对不起,我是 Xcode 的新手

以上是关于如何通过表格视图单元格中的 url 预览元数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过按表格视图外的按钮来清空表格视图内的单元格数据?

如何通过单击更改集合视图单元格中的标签颜色

更新表格视图单元格中的核心数据值后如何刷新

如何在通过文本字段和圆形矩形按钮提供的表格视图单元格中显示数据

如何从表格视图中的选定单元格中获取文本?

核心数据:如何显示 fetchrequest 的结果以计算表格视图单元格中的值