【发布时间】:2015-04-16 23:09:03
【问题描述】:
我有一个 UICollectionView,我在我的 UICollectionViewCells 中覆盖了 hitTest:withEvent:,以便允许单元格外部的点击注册为单元格上的点击。
当我执行此操作并在现在注册为命中的单元格外部点击时,我会调用 didHighlightItemAtIndexPath 和 didUnhighlightItemAtIndexPath,但我没有收到对 didSelectItemAtIndexPath 的调用。如果我在单元格内点击,我会得到所有预期的突出显示并像以前一样选择项目调用。
我没有设置任何自定义手势识别器,也没有覆盖 touchesBegan 或类似的东西。
那么有谁知道在什么情况下您会调用 didHighlightItemAtIndexPath 而没有调用 didSelectItemAtIndexPath?有什么方法可以调用我的 didSelectItemAtIndexPath 吗?谢谢。
编辑
我忘了提到我的 UICollectionView 在 Today Widget 中,所以它包含在 Notification Center 滚动视图中。如果我将选择代码移动到 didUnhighlightItemAtIndexPath 中,那么当您在单元格外部点击时会调用它,但结果是如果不选择其中一个单元格,您实际上无法滚动通知中心。
所以也许我在这里遇到的突出显示和选择之间的区别与滚动视图响应程序取消单元格外的选择有关?
【问题讨论】:
-
不要覆盖
hitTest:withEvent:,而是尝试覆盖pointInside:withEvent:。那效果更好吗?hitTest:withEvent:的默认实现使用pointInside:withEvent:,但也许UICollectionView也直接使用pointInside:withEvent:。 -
我实际上已经覆盖了 pointInside:withEvent: 来实现它。它只从 hitTest:withEvent: 中调用过。
标签: ios objective-c uicollectionview uicollectionviewcell