¿Cómo get la ruta de índice de un encabezado UICollectionView cuando se utiliza un gesto de toque?

Obtengo el punto de contacto usando locationInView y lo paso a indexPathForItemAtPoint de la vista de colección. Obtendré una ruta de índice para una celda, pero nunca una UICollectionReusableView (encabezado / pie de página), ya que siempre devuelve nil.

Probablemente sea demasiado tarde para ayudar en esto, pero tal vez alguien más lo haga como yo. El problema es que no hay un indexPath significativo para el encabezado (parece que siempre devuelve 0.0).

De todos modos, cuando obtengo el punto, en lugar de indexPath, estoy revisando para ver si está dentro de la subvista para el encabezado:

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

Esto funciona en mi instancia solo porque conozco el tamaño del encabezado y puedo asumir con security su position dentro de collectionview porque collectionView solo tiene una sección (0).

HTH

El encabezado realmente no tiene un índicePath; reporta como fila 0, pero también lo hace la primera celda en la sección.

Puede resolver este problema fácilmente al hacer una subclass simple de UITapGestureRecognizer que tiene una propiedad Integer, simplemente coloque la siguiente interfaz y la implementación vacía en la parte superior del file .m del controller de View:

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

Cuando proporcione la vista suplementaria, solo agregue uno de estos reconocedores y establezca el número de la sección:

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

Ahora puede acceder al número de sección en el bloque de acción:

 - (void)headerTapped:(id)sender { HeaderTapRecognizer *htr = sender; NSInteger sectionNumber = htr.sectionNumber; NSLog(@"Header tapped for index Section %d",sectionNumber); } 

UITapGestureRecognizer y UITapGestureRecognizer a cada vista de encabezado. Otra opción sería proporcionar una subclass personalizada de UIControl para cada vista de encabezado.