ios - uicollectionviewcontroller - uicollectionviewcell swift
Handle Touch en UiCollectionView-¿SWIFT? (2)
Tengo este gran UICollectionView
ocupando la mayor parte de la pantalla y hay un UIButton
que muestra el menú. Quiero ocultar el menú cuando el usuario toca en cualquier lado de la pantalla que desafortunadamente es parte de UICollectionView
para mí. Intenté en otra vista el código siguiente, funciona bien ... pero no para UICollectionView
. La función no se llama.
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
hidemenu()
self.view.endEditing(true)
}
¿Cuál es el problema? Gracias por tu tiempo
O cómo desencadenar touchesBegan
en UIViewController
donde reside UICollectionView
Aquí está el proyecto: https://drive.google.com/open?id=0B6dTvD1JbkgBLTBHQklEWFZESzA&authuser=0
Al tocar en los controles de desplazamiento (como UIScrollView, UITableView, UICollection, etc.) no se llama touchesBegan
método touchesBegan
. porque tienen su propio método selector
. Para manejar esta situación, debe crear UITapGesture
en UICollectionView
. Mientras toca en UICollectionView
, se UICollectionView
su método de selector y hace lo que quiera.
Aquí están los enlaces que lo guían. cómo crear un doble Tap Gesture en UICollectionView
. Con ayuda de esto, también puedes crear un único gesto Tap.
Vista de colección + Gesto de doble toque
Editar: Haga los siguientes cambios, funciona bien.
Paso 1 : handleTap
en SwipeMenuViewController
.
func handleTap(sender: UITapGestureRecognizer) {
println("called swipe")
}
Paso 2 : SwipeMenuViewController
la variable global del controlador SwipeMenuViewController
. eso está fuera de viewDidLoad()
var vc2 = SwipeMenuViewController()
Paso 3 : Declarar TapGesture
en viewDidLoad()
var tap = UITapGestureRecognizer(target: vc2, action : "handleTap:")
tap.numberOfTapsRequired = 1
self.collectionView.addGestureRecognizer(tap)
Salida :
llamado deslizar
Espero que esto te ayude
Puede utilizar este método directamente, siempre que el usuario toque en cualquier parte de la vista de colección, su menú se ocultará automáticamente:
func collectionView(_ collectionView: UICollectionView,
didSelectItemAtIndexPath indexPath: NSIndexPath)
{
hidemenu()
self.view.endEditing(true)
}
Para detectar el tap en espacios entre la celda, aquí está el código
self.collectionView.backgroundView = [[UIView alloc] initWithFrame:self.collectionView.frame];
self.collectionView.backgroundView.userInteractionEnabled = YES;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
self.collectionView.backgroundView.gestureRecognizers = @[tapRecognizer];