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 与自定尺寸项目错误?