uicollectionviewcontroller ios swift touch uicollectionview

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];