iOS:向容器视图添加 UITapGestureRecognizer 会拦截 UICollectionView 的 didSelectItemAtIndexPath 方法
Posted
技术标签:
【中文标题】iOS:向容器视图添加 UITapGestureRecognizer 会拦截 UICollectionView 的 didSelectItemAtIndexPath 方法【英文标题】:iOS: Adding UITapGestureRecognizer to container view intercepts UICollectionView's didSelectItemAtIndexPath method 【发布时间】:2014-12-27 03:17:18 【问题描述】:我在 ViewController 的主 Content View
中添加了一个 UITapGestureRecognizer
,以便在点击内容视图时关闭我的键盘。
问题是我的内容视图中有一个UICollectionView
,设置UITapGestureRecognizer
会拦截我的UICollectionView
的点击。
如何让我的UICollectionView
的点击通过,以便didSelectItemAtIndexPath
方法再次触发?
func setupGestureRecognizer()
let dismissKeyboardTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
contentView.addGestureRecognizer(dismissKeyboardTap)
func dismissKeyboard()
contentView.endEditing(true)
【问题讨论】:
【参考方案1】:解决此问题的方法是将 .cancelsTouchesInView = false
添加到您的 UITapGestureRecognizer
。
这允许其他视图内的触摸通过,例如 UITableViewCell
触摸。
func setupGestureRecognizer()
let dismissKeyboardTap = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
dismissKeyboardTap.cancelsTouchesInView = false
contentView.addGestureRecognizer(dismissKeyboardTap)
func dismissKeyboard()
contentView.endEditing(true)
【讨论】:
嗯,这在 Swift 4.2 ios 12 上对我不起作用 :(【参考方案2】:试试这个
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
[self.view endEditing:YES];
并删除您的 tapGesture。
【讨论】:
这会停止拦截UICollectionView
,但不会在点击屏幕上的任何位置时关闭键盘。以上是关于iOS:向容器视图添加 UITapGestureRecognizer 会拦截 UICollectionView 的 didSelectItemAtIndexPath 方法的主要内容,如果未能解决你的问题,请参考以下文章
将多个容器视图放在 ios 中的分页 UIScrollView 中