在 UICollectionView 单元格中单击 WKWebView 会导致未调用回调

Posted

技术标签:

【中文标题】在 UICollectionView 单元格中单击 WKWebView 会导致未调用回调【英文标题】:Click on WKWebView in a UICollectionView cell causes callback not being called 【发布时间】:2019-08-30 10:43:33 【问题描述】:

我有一个 UICollectionView,它当时显示一个页面/单元格,分页已启用。单元格是自定义的,它们包含上半部分的图像滚动视图和下半部分的 WebView。 WebView 包含带有一些链接词的文本,单击链接时会打开覆盖下半部分的模态文本视图。

首先我在点击 webView(和只是 webView)时遇到了问题(不仅仅是链接词),当我想滑动到另一个页面时,下一页/单元格是黑色的(collectionView.backgroundColor 的颜色)但是在打印时collectionView.visibleCells 它存在。后来从坐标中我发现第二个单元格的坐标与第三个单元格的坐标相同。

UICollectionView cellForItemAt indexPath is skipping row indexes in ios 10

我遵循了这个答案,因为他遇到了同样的问题并设置了

collectionView.isPrefetchingEnabled = false

它修复了空白页,但另一个问题出现了。

现在,当我单击 webView 时,该单元格的行为就像它已从集合中删除一样,我可以单击页面并获得响应,除了没有调用 collectionView 回调方法之外的所有内容,当我返回该页面时也不会显示,也didEndDisplaying 当我滑出时。

如果页面不可见,我需要关闭模态文本视图。

当我点击 scrollview/imageView 然后滑动一切正常。

如果我点击其他页面上的 webView,第一个页面会开始反应。

【问题讨论】:

请分享一些代码。 【参考方案1】:

问题在于 webView 的内存周期。它使不可见的单元格保持活动状态,因此没有激活回调方法。所以我想打破 webView 内存引用,但我将 webView 作为第一响应者放在 willDisplay 单元回调上。我猜它会覆盖之前的 webView 引用,现在一切正常,即使使用 collectionView.isPrefetchingEnabled = true

 func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 

    if let cell = cell as? CustomViewCell 
        cell.webView.becomeFirstResponder()
    
 

【讨论】:

以上是关于在 UICollectionView 单元格中单击 WKWebView 会导致未调用回调的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionView 单元格中停止动画

如何在不同的 UICollectionView 单元格中显示不同的视频?

如何调整 uicollectionview 单元格中 imageview 的位置?

修改 UICollectionView 中特定单元格中的 UIButton

UICollectionView 单元格中的 UIActivityIndi​​cator 随机不会隐藏

访问位于设备屏幕中心的 UICollectionView 单元格中的视图