使用点击手势时如何获取 UICollectionView 标头的索引路径?

Posted

技术标签:

【中文标题】使用点击手势时如何获取 UICollectionView 标头的索引路径?【英文标题】:How to get the index path of a UICollectionView header when using a tap gesture? 【发布时间】:2013-02-17 06:52:44 【问题描述】:

我使用 locationInView 获取接触点并将其传递给集合视图的 indexPathForItemAtPoint。我将获得一个单元格的索引路径,但绝不是 UICollectionReusableView(页眉/页脚),因为它总是返回 nil。

【问题讨论】:

【参考方案1】:

标头实际上没有 indexPath;它报告为第 0 行,但该部分中的第一个单元格也是如此。

您可以通过创建一个具有 Integer 属性的简单 UITapGestureRecognizer 子类轻松解决此问题,只需将以下接口和空实现放在 View Controller 的 .m 文件的顶部即可:

@interface HeaderTapRecognizer : UITapGestureRecognizer
@property (nonatomic, assign) NSInteger sectionNumber;
@end

@implementation HeaderTapRecognizer
@end

当您提供补充视图时,只需添加这些识别器之一并设置部分编号:

HeaderTapRecognizer *recognizer = [[HeaderTapRecognizer alloc] initWithTarget:self action:@selector(headerTapped:)];
recognizer.sectionNumber = indexPath.section;
[cell addGestureRecognizer:recognizer];

现在您可以访问操作块中的部分编号:

- (void)headerTapped:(id)sender

    HeaderTapRecognizer *htr = sender;
    NSInteger sectionNumber = htr.sectionNumber;
    NSLog(@"Header tapped for index Section %d",sectionNumber);

【讨论】:

我一点也不明白。无论如何,您从哪里获得 indexPath?【参考方案2】:

在这方面提供帮助可能为时已晚,但也许其他人会像我一样做到这一点。问题是标头没有有意义的 indexPath(它似乎总是返回 0,0)。

无论如何,当我明白这一点时,我正在检查它是否在标题的子视图内,而不是 indexPath:

CGPoint point = [sender locationInView:collectionView];
if (CGRectContainsPoint(CGRectMake(0.0f,0.0f,140.0f,140.0f), point))
   NSLog(@"Point was inside header");

这仅在我的实例中有效,因为我知道标题的大小并且可以安全地假定它在 collectionview 中的位置,因为 collectionView 只有一个部分 (0)。

HTH

【讨论】:

【参考方案3】:

我会创建一个UITapGestureRecognizer 并将其附加到每个标题视图。另一种选择是为每个标题视图提供UIControl 的自定义子类。

【讨论】:

我已经完成了点击手势识别器,但是在集合视图上使用一个实例而不是每个标题一个实例,因为这样更有效。我真的只是在寻找如何根据点获取标头的索引路径。 我认为拥有多个点击识别器不会有问题,但在这种情况下,您可以使用自定义标题视图...如果您的问题真的是“我如何获取索引路径点击集合视图中的标题视图“你应该问:) 我要求这种方式提供更多上下文,以防使用轻击手势时 indexPathForItemAtPoint 中存在一些错误或问题。是的,真正的问题可能是“如何获取在集合视图中点击标题视图的索引路径?”。

以上是关于使用点击手势时如何获取 UICollectionView 标头的索引路径?的主要内容,如果未能解决你的问题,请参考以下文章

当用户滑动并点击手指(使用触摸手势)时如何隐藏所有 CollectionViewCell?

在ios中使用点击手势选择另一个图像时如何取消选择上一个选择的图像?

iOS 手势获取cell位置点击cell获取indexpath

如何从表格视图单元格中的图像手势获取 indexPath

获取手势点击哪个控件 UIGestureRecognizer

获取点击手势识别器的标签或索引