Ocultar keyboard al tocar en cualquier lugar fuera de UITextField cuando la vista incluye UICollectionView

Hay algunas respuestas como esta , pero en el caso de que haya un UIScrollView o UICollectionView presente, no funciona.
El método touchesBegan en viewController nunca se llamará.

En la pantalla, tengo un UITextField en la parte superior.
Debajo de eso, llenar el rest de la pantalla es una UICollectionView .
Necesito desestimar el keyboard si toco en cualquier lugar además del UITextField ( incluida la vista de la colección, obviamente )

Entonces, ¿cuál es la mejor manera de hacer esto?

Para un paradigma de interfaz de usuario tan común, parece que debería haber una solución conocida, pero aún no me he encontrado.

Para descartar Teclado presionando el button Ver: Agregar un gesto Tap a su ViewController.collectionVer de la siguiente manera:

 //declare a property to store your current responder @property (nonatomic, assign) id currentResponder; //in viewDidLoad: UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignOnTap:)]; [singleTap setNumberOfTapsRequinetworking:1]; [singleTap setNumberOfTouchesRequinetworking:1]; [self.collectionView addGestureRecognizer:singleTap]; //Implement the below delegate method: - (void)textFieldDidBeginEditing:(UITextField *)textField { self.currentResponder = textField; } //Implement resignOnTap: - (void)resignOnTap:(id)sender { [self.currentResponder resignFirstResponder]; } 

La forma sencilla de hacerlo es:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } 

Aquí hay una solución mejor que no requiere agregar reconocedores de gestos individualmente a todo. Está en Swift, pero podría convertirse fácilmente en ObjC.

Agregue lo siguiente a su viewDidLoad ():

 let tap = UITapGestureRecognizer(target: self, action: "dismissKeyboard") tap.cancelsTouchesInView = false view.addGestureRecognizer(tap) 

y luego agregue la siguiente statement de método:

 func dismissKeyboard() { view.endEditing(true) } 

… donde view es tu campo de text.