ios - una - ¿Cómo agregar el gesto de tap a UICollectionView, mientras se mantiene la selección de celda?
seleccionar el contenido de una celda en excel (2)
En lugar de tratar de forzar a didSelectItem
, puede obtener el indexPath y / o la celda de esta manera:
func tap(sender: UITapGestureRecognizer){
if let indexPath = self.collectionView?.indexPathForItem(at: sender.location(in: self.collectionView)) {
let cell = self.collectionView?.cellForItem(at: indexPath)
print("you can do something with the cell or index path here")
} else {
print("collection view was tapped")
}
}
Tarea
Agregue un solo gesto de toque a UICollectionView
, no UICollectionView
en la selección de celda.
Quiero algunos otros toques en la parte sin celda de collectionView.
Código
Usando XCode8, Swift 3.
override func viewDidLoad() {
...
collectionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tap)))
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath)
}
func tap(sender: UITapGestureRecognizer){
print("tapped")
}
Resultado
Sí, se pone en el camino ahora. Cuando toca en la celda, registra "golpeado".
Análisis
- Verifico el valor de retorno del TestTest de la collectionView y la celda. Ambos devolvieron la celda girada, lo que significa que forman una cadena de respuesta de celda -> CollectionView
- sin gestos en la celda
- 3 gestos en collectionView, nadie parece funcionar con la celda seleccionada
- UIScrollViewDelayedTouchesBeganGestureRecognizer
- UIScrollViewPanGestureRecognizer
- UITapGestureRecognizer
- callStack, parece que la selección de celda tiene una traza de pila diferente con el patrón de acción de objetivo de gesture.
- el gesto de doble toque funciona junto con la selección de celda.
Pregunta
No se pudo encontrar más rastro. ¿Alguna idea sobre cómo se implementa la selección de células o para lograr esta tarea?
Siempre que desee agregar un reconocedor de gestos, pero no robar los toques de la vista de destino, debe establecer que UIGestureRecognizer.cancelsTouchesInView
para su instancia de gestureRecognizer
falso.