如何通过表格视图单元格中的 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 预览元数据?的主要内容,如果未能解决你的问题,请参考以下文章