带有手势识别器的 UICollectionView
Posted
技术标签:
【中文标题】带有手势识别器的 UICollectionView【英文标题】:UICollectionView with gesture recogniser 【发布时间】:2016-05-11 18:47:11 【问题描述】:我有一个 UICollectionView,它附有一个长按手势。当我按下一个单元格时它工作正常,但如果触摸区域不是一个单元格,则应用程序崩溃并显示 EXC_BREAKPOINT
它崩溃了
if let indexPath : NSIndexPath = collectView.indexPathForItemAtPoint(point)!
线。我相信我需要检查该点实际上是一个单元格,但我不确定要检查什么
代码如下
@IBAction func longPressCell(sender: UILongPressGestureRecognizer)
if (sender.state == UIGestureRecognizerState.Began)
if let point : CGPoint = sender.locationInView(self.collectionView)
if let collectView = self.collectionView
if let indexPath : NSIndexPath = collectView.indexPathForItemAtPoint(point)!
let adopt : UserPet = self.fetchedResultsController.objectAtIndexPath(indexPath) as! UserPet
NSLog("Adopt: \(adopt)")
【问题讨论】:
我认为问题可能是如果您触摸单元格外部,则通过 indexPathForItemAtPoint() 返回的索引路径为零,并且您使用 !运算符,不能用于缺失 (nil) 值。您应该首先检查返回的值是否不为零,然后继续,并且 - 根据您的业务逻辑 - 如果您不需要在单元格之外处理它,则丢弃该手势。 对上述内容进行编辑:我认为您需要删除 !操作员在行尾,使其正常工作。尽管“条件绑定的初始化程序必须具有可选类型,而不是'NSIndexPath'”,但您不应该有编译器警告/错误吗? 谢谢,用 if collectView.indexPathForItemAtPoint(point) != nil 解决了 【参考方案1】:collectView.indexPathForItemAtPoint(point) != nil 解决了
【讨论】:
以上是关于带有手势识别器的 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章
带有平移手势识别器的UICollectionViewCell
手势识别器在其他 UICollectionViewCell 内的 UICollectionView 上不起作用
具有 UIView 作为子视图的 UICollectionView 的选择性手势识别
UICollectionView的选择性手势识别,UIView为子视图