ios UICollectionView solo llama a didSelectItemAtIndexPath si el usuario pulsa dos veces, no llamará cuando el usuario toque un solo toque




uicollectionview self sizing cells (10)

Me encontré con este problema yo mismo. Originalmente tenía botones y etiquetas, luego refactoreé mi UI y convertí esos botones / etiquetas en celdas para un UICollectionView .

Finalmente me di cuenta de que los botones estaban consumiendo mis grifos. Sin pensarlo, simplemente moví mis botones originales a la celda y no los convertí en un UIImage recto. Había destruido los botones asociados a las acciones y solo estaba buscando la selección de celdas, así que me tomó un tiempo averiguarlo.

Estúpido y obvio en retrospectiva, pero me llevó un par de horas darme cuenta de lo que había hecho.

Tengo un UICollectionView que es aproximadamente del tamaño de la pantalla. Las UICollectionViewCells que muestra son del mismo tamaño que collectionView. Cada celda tiene un UIImage que es del tamaño de la celda. La vista de colección tiene habilitada la función de búsqueda, por lo que básicamente se trata de una presentación de diapositivas de pantalla completa para que el usuario pueda deslizarse.

El problema es ese
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath solo se -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath si el usuario toca dos dedos en una celda o pulsa con un dedo y luego suelta. No parece tener el comportamiento predeterminado de selección de un solo toque. No hice ningún cambio en el reconocedor de gestos CollectionView, así que tengo problemas para encontrar una solución a este problema.


Si usa solo didselect:

self.collectionView.allowsMultipleSelection = false

O elimine esa línea.


Si tiene una vista en la celda que obstruye la vista del contenido de las celdas que es intratable, entonces no podrá conectar la devolución de llamada del delegado para la celda.

Deshabilitará la interacción del usuario en la vista obstructiva en el NIB o en el código.

view.userInteractionEnabled = NO;


Me encontré con este problema en Swift 3 y xcode 8, tenía una vista y una vista de colección dentro de esto. La vista de colección tiene userInteractionEnabled en true, todavía no funcionaba. Solucionado este problema anulando shouldHighlightItemAt, no tengo ningún extra / implementación personalizada en este método, por lo que no anulé este método. Después de agregar el código siguiente, se llama al método didSelectItem.

func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {
        return true
    }

Solo estaba teniendo el mismo problema y resultó que había un UITapGestureRecognizer en la UIView contenía UICollectionView y que respondía en su lugar.

Eso explica por qué didSelectItemAtIndexPath funciona solo si el usuario toca con dos dedos o presiones largas con un dedo porque eso no UITapGestureRecognizer el UITapGestureRecognizer .

Por lo tanto, compruebe todo el UITapGestureRecognizer que obtuvo allí, no necesariamente en el UICollectionView directamente, pero podría estar en cualquier UIView que lo contenga.


Recuerde agregar UICollectionViewDataSource, UICollectionViewDelegate a la clase


Solo tuve el mismo problema ... Estaba anulando toques Comencé en la vista CollectionCell y esto causó que didSelectItemAtIndexPath no se disparara cuando toqué la celda. Se eliminó la anulación y todo funcionó.


En mi caso fue solo

self.collectionView.allowsSelection  =NO;

Yo tenía el código.

cambiando a

self.collectionView.allowsSelection  =YES;

arreglalo.



¿Estás seguro de que no estás anulando accidentalmente - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath ? "Seleccionar" frente a "deseleccionar" me ha hecho tropezar en el pasado con la finalización del código de Xcode.