2013-02-17 47 views

回答

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)。

HTH

1

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

+0

我已经完成了轻拍手势识别器,但在集合视图中使用单个实例,而不是每个头的一个,因为这样效率更高。我真的只是在寻找如何基于一个点来获取标题的索引路径。 – akaru 2013-02-17 18:02:04

+0

我不认为有多个水龙头识别器会成为一个问题,但在这种情况下,您可以使用自定义标题视图...如果您的问题真的是“如何获得标题视图中的水龙头的索引路径一个集合视图“你应该问:) – nielsbot 2013-02-18 06:55:08

+0

我问这种方式给更多的上下文,以防在使用轻击手势时indexPathForItemAtPoint中存在一些错误或问题。是的,真正的问题可能是“如何获得集合视图中标题视图上的点击索引路径?”。 – akaru 2013-02-18 17:09:04

7

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

您可以通过UITapGestureRecognizer的简单子类,具有整数属性轻松解决这个问题,只要把下面的接口和空的实现在视图控制器的.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); 
} 
+0

我完全不理解这一点。无论如何,你在哪里获得indexPath? – p0lAris 2015-06-06 19:19:54

相关问题