iphone ios cocoa-touch uicollectionview

iphone - No se llama al método tap del delegado de UICollectionView



ios cocoa-touch (8)

Tengo una vista de colección, el delegado del origen de datos funciona bien, pero UICollectionViewDelegate :

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"didselect"); }

No me llamaron, aunque configuré el delegado (como hice con la fuente de datos y funcionó), debo mencionar que mi celda se carga desde una punta y está conectada a una subclase de UICollectionViewCell . De todos modos, las celdas no responden a mi toque. . UIImageView la interacción del usuario en el UIImageView que está en mi celular.

además :

-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"this is caled"); return YES; }

no está siendo llamado!

como mencioné lo hice

[self.collectionView setDelegate:self];

y por supuesto

<UICollectionViewDelegate>

También no tengo ninguna anulación de touchBegan ..

ACTUALIZACIÓN :

¡EXTRAÑO! ¡Sólo se llama si hago una pulsación larga! ¿Cómo puedo solucionar esto, establezco delaysContentTouches en NO más? No tengo ningún gestor de reconocimiento de gestos implementado.

ayuda por favor. Gracias.


Asegúrese de que no haya ningún objeto que establezca la propiedad userInteractionEnabled en NO en el UICollectionViewController .

Al igual que lo que dicen otras personas, tuve el mismo problema y se solucionó eliminando una llamada a userInteractionEnabled donde la vista principal lo estaba agregando como controlador de vista secundario. Pude probar esto agregando un UIButton a la celda y determinando que incluso no podía recibir los eventos táctiles.


Me enfrentaba al mismo problema, que al hacer clic en la celda UICollectionView personalizada, no se detectaba el clic. En mi caso, el problema era que en la Xib de CustomCell, la interacción de usuario estaba habilitada y por eso no se llamaba a la opción de selección de datos de UICollectionview en la celda de la que no tenía manejador.


Parece que has agregado TapGestureRecognizer en algún lugar y evita la selección de celdas. Revísalos, ese debería ser el problema.


Parece que hay un UITapGestureRecognizer algún lugar de la jerarquía de vistas. De forma predeterminada, UITapGestureRecognizer s consume el toque que UITapGestureRecognizer , lo que significa que no se pasa a las vistas que se encuentran debajo de la jerarquía. Necesitas encontrar el gesto de toque de pícaro y agregar esta línea.

tapGestureRecognizer.cancelsTouchesInView = NO;

Esto hará que pase los toques a las vistas que se encuentran debajo de la jerarquía y, con suerte, resolverá su problema.


Tal vez debería usar un gesto de toque en la vista de colección.


Tuve un problema similar con PSUICollectionView (esto también funciona con iOS5) y lo arreglé poniendo un botón en mi CollectionViewCell y configurando el objetivo de ese botón. También agregue etiquetas para saber qué botón se presiona.


en su archivo .h, importe CellViewController y agregue delegado

#import "myColleCell.h" UIViewController<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>

en su archivo .m, agregue los siguientes códigos a su ViewDidLoad ,

UINib *cellNib = [UINib nibWithNibName:@"myColleCell" bundle:nil]; [myCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"myColleCell"]; UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setItemSize:CGSizeMake(220, 220)]; [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; [myCollectionView setCollectionViewLayout:flowLayout];

y configuración de la celda con ur CellViewController

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier= @"myColleCell"; myColleCell *cell = (myColleCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; [cell setupCell:[dataArray objectAtIndex:indexPath.row]]; //setup cell function methods placed in your CellViewController return cell; }

y, finalmente, asegúrese de que su cellView, collectionView estén configurados como interactivos para el usuario en YES


Agregando aquí como referencia para otras personas que buscan la respuesta.

Respuesta corta:

Retrasa los toques de los reconocedores de gestos predeterminados asociados con la vista de tabla:

if let gestures = tableView.gestureRecognizers{ for gesture in gestures { gesture.delaysTouchesBegan = true } }

Explicación

Cada tableview tiene reconocedores de gestos asociados con ella. Lo que causa los retrasos de los toques en la celda UItableView personalizada. Establezca delaysTouchesBegan en true para que el toque se pueda pasar a las subvistas rápidamente.

En mi caso, fue CollectionViewController dentro de UItableViewCell para el que se llamó a collectionView: didSelectItemAtIndexPath con un retraso.