我使用 locationInView 获取接触点并将其传递给集合视图的 indexPathForItemAtPoint。我将获得一个单元格的索引路径,但绝不是 UICollectionReusableView(页眉/页脚),因为它总是返回 nil。
问问题
5390 次
3 回答
6
标头实际上没有 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);
}
于 2013-09-09T05:07:44.803 回答
1
I would create and attach a UITapGestureRecognizer
to each header view. Another option would be to provide your a custom subclass of UIControl
for each header view.
于 2013-02-17T07:10:43.017 回答
1
对此提供帮助可能为时已晚,但也许其他人会像我一样做到这一点。问题是标头没有有意义的 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)。
高温高压
于 2013-02-28T07:05:48.343 回答