La selección no es posible cuando UICollectionView está nested en UITableVIew

Tengo un UITableView donde cada celda contiene un UICollectionView .

Puedo desplazarme verticalmente a UITableView y desplazar horizontalmente la UICollectionView anidada, pero no puedo seleccionar UICollectionViewCell en UICollectionView .

La selección está deshabilitada en UITableView y activada (el estado pnetworkingeterminado) en UICcollectionView .

La collectionView:didSelectItemAtIndexPath: simplemente no se llama.

La forma en que pude resolver esto fue agregar un reconocedor de gesto de toque a la celda para manejar el toque manualmente, en lugar de confiar en el didSelectRowAtIndexPath que no se llama:

Rápido

 let tapRecognizer = UITapGestureRecognizer(target: self, action: "cellTapped:") tapRecognizer.numberOfTapsRequinetworking = 1 cell.addGestureRecognizer(tapRecognizer) 

C objective

 UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)]; tapRecognizer.numberOfTapsRequinetworking = 1; [cell addGestureRecognizer:tapRecognizer]; 

Ahora puede manejar la celda que se cellTapped: en el método cellTapped: y puede get la reference a la celda que se seleccionó a través de tapRecognizer.view .

Acabo de funcionar, así que pensé que compartiría mi solución con ustedes.

Después de configurar los delegates y UITableView datos necesarios para el UITableView y el UITableView nested, puede hacer que su UICollectionView la primera vista seleccionable como esta

 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... [tableViewCell bringSubviewToFront:tableViewCell.yourCollectionView]; return cell; } 

Esto hará que UICollectionView lo primero que se UICollectionView seleccionar a través del delegado

 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; 

Cualquier otra parte de la vista se seleccionará utilizando el delegado UITableView

 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 

¡Espero que esto ayude!

mi primer instinto es que los reconocedores de gestos entre las dos vistas pueden estar en conflicto

más específicamente, los GR de UITableView para un toque pueden estar evitando que los GR de UICollectionView reciban toques

Primero, compruebe que ha proporcionado el origen de datos necesario y los delegates. Entonces, si está utilizando la vista de colección en un número específico de celdas de vista de tabla, puede colocarlas directamente en la celda prototipo. Asegúrese de que su celda tenga los límites adecuados (ancho)

Intente deshabilitar delaysContentTouches para tableView y asegúrese de que el delegate para las vistas de recostackción esté configurado correctamente.

¡Esto no debería ser un problema! no se necesitan reconocedores de gestos personalizados. no es necesario desactivar la selección de tableview.

asegúrate de:

  1. configure su vista de tabla en storyboard o código y establezca su fuente de datos y delegue
  2. en cellforrowatindexpath después de eliminar una tablaviewcell, obtenga una reference a la colecciónviewview correspondiente y configure sus fonts de datos (collectionviews) y delegue
  3. implementar las vistas de tabla y las collections de visitas delegar los methods de selección y registrar sus llamadas para ver si funciona

Acabo de implementar un pequeño proyecto de ejemplo antes de escribir esa respuesta para asegurarme de que no hay problema. ¡Puedo uploadlo si aún no funciona para ti!

¡buena suerte!