Estoy tratando de averiguar cómo se hace esto de la manera correcta. He tratado de describir la situación: subvista de bloque UIGestureRecognizer para controlar eventos táctiles
estoy añadiendo un UITableView
como subvista de un UIView
. El UIView
responde a un toque- y pinchGestureRecognizer
, pero al hacerlo, la vista de tabla deja de reaccionar a esos dos gestos (aún reacciona a los golpes).
He hecho que funcione con el siguiente código, pero obviamente no es una buena solución y estoy seguro de que hay una mejor manera. Esto se pone en el UIView
(el supervista):
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if([super hitTest:point withEvent:event] == self) {
for (id gesture in self.gestureRecognizers) {
[gesture setEnabled:YES];
}
return self;
}
for (id gesture in self.gestureRecognizers) {
[gesture setEnabled:NO];
}
return [self.subviews lastObject];
}
me gusta esta solución los más, ya que no implica jugar con los toques, 'hitTest: withEvent:' o 'pointInside: withEvent:'. – DarkDust
Solución limpia, ya que puede probar con p. Ej. 'return! (touch.view == givenView);' si solo quiere excluir una vista dada o 'return! (touch.view.tag == kTagNumReservedForExcludingViews);' cuando quiera detener el procesamiento de su reconocedor toque una conjunto completo de diferentes subvistas. – cate
Haría la prueba de aciertos con '- (BOOL) isDescendantOfView: (UIView *) view'. Esto también funciona bien en '- (void) touchesBegan: (NSSet *) toca withEvent: (UIEvent *) event' cuando se subclasifica UIGestureRecognizer. – Christoph