2013-02-17 36 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

相關問題