UICollectionViewCell 上的自定义命中测试

Posted

技术标签:

【中文标题】UICollectionViewCell 上的自定义命中测试【英文标题】:Custom hit-test on UICollectionViewCell 【发布时间】:2017-04-13 14:47:47 【问题描述】:

我有基于UICollectionView 的聊天用户界面。很常见的UI,看起来像 iMessage。 我有处理聊天消息气泡点击的逻辑,使用

collectionView(_:didSelectItemAt:)

我想将点击手势识别器添加到此集合视图的背景以关闭键盘。

所以我想在我的bubbleCell 上自定义命中测试,这样我就可以点击气泡来调用

collectionView(_:didSelectItemAt:)

并点击空白区域以调用关闭键盘逻辑。

我应该怎么做才能实现这种行为?

更新。一些代码

如果我向 ChatViewController.view 添加点击手势

func viewDidLoad() 
    // ...
    let tap = UITapGestureRecognizer(target: self, action: #selector(ChatViewController.dismissKeyboard))
    self.view.addGestureRecognizer(tap)


func dismissKeyboard() 
    self.view.endEditing(true)

这个代码永远不会被调用

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    // Handle tap on cell

【问题讨论】:

显示一些代码你正在尝试什么? 【参考方案1】:

我认为您需要在 UITapGestureRecognizer 上将 cancelTouchesInView 设置为 false 才能识别两个点击(在收藏视图和您的点击手势识别器上)。

let tap = UITapGestureRecognizer(target: self, action: #selector(ChatViewController.dismissKeyboard))
tap.cancelsTouchesInView = false
self.view.addGestureRecognizer(tap)

【讨论】:

它对我有用,谢谢!但我还必须覆盖 - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;检查用户是否点击单元格中的气泡或空闲空间的方法

以上是关于UICollectionViewCell 上的自定义命中测试的主要内容,如果未能解决你的问题,请参考以下文章

嵌入在 UICollectionViewCell 中的自定尺寸 UITableView

如何在 UICollectionViewCell 上设置 UILabel?

UICollectionViewCell 上的奇怪边框 - Swift

iOS UICollectionView 与自定尺寸项目错误?

为啥点击 UICollectionViewCell 上的文本会消失?

UICollectionViewCell 上的按钮