Tengo un UIView
en el que agregué un UITapGestureRecognizer
. Dentro de esa vista también tengo una subvista en la que básicamente es una especie de UITableView
. La pregunta es por qué el UITableView
no reconoce el toque en una fila, sino que va al manejador del reconocedor de gestos táctiles todo el tiempo. ¿Por qué es esto y cómo lo resuelvo? Si configuro el número de tomas en 2, entonces funciona bien. Alguna idea sobre como resolver esto? Básicamente no llama al didSelectRowAtIndexPath
.Conflicto UITapGestureRecognizer en UIView y para UITableView
Respuesta
Conjunto cancelsTouchesInView
de su reconocedor a NO
. De lo contrario, "consume" el toque por sí mismo y no lo transfiere a la vista de tabla. Es por eso que el evento de selección nunca ocurre.
Si desea tanto su UITableView
y su UITapGestureRecognizer
para recibir eventos de toque, entonces sí la cancelsTouchesInView = NO
va a funcionar. Si desea que el reconocedor de gestos de toque no reciba los eventos táctiles destinados a la vista de tabla, es un poco menos fácil pero muy factible.
Básicamente cuando está creando su reconocedor de gestos se configura como su delegado. Luego implementa el método de delegado gestureRecognizer:shouldReceiveTouch:
. Una implementación básica podría verse así.
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
UITableView *tableView = self.tableView;
CGPoint touchPoint = [touch locationInView:tableView];
return ![tableView hitTest:touchPoint withEvent:nil];
}
En esencia, este método (tal como se aplica) pide al tableView
si la ubicación de este toque cae dentro de la jurisdicción del tableView
's, y si lo hace, se bloqueará el reconocedor gesto de recibir el toque ... permitiendo que el tableView
para recibir el toque
¿No podríamos simplificar esto cambiando las líneas 3 y 4 a:' CGRect frame = self.tableView.frame; return! CGRectContainsPoint (frame, location); '? – Aufwind
@Aufwind Gracias por señalar mi código de cálculo excesivamente complejo. Debo haber precipitado esta respuesta demasiado. 'CGRectContainsPoint()' es ciertamente una forma mucho mejor de manejar este cálculo que el que originalmente elegí. Sin embargo, he editado mi respuesta para usar 'hitTest: withEvent:'. Cuál sería mi método preferido por algunas razones. Una de las cuales sería una vista de forma irregular. Si una vista se presentó con forma irregular (por ejemplo, un círculo que solo maneja toques en el área del círculo). Este caso no sería manejado adecuadamente por los cálculos manuales que estaba realizando. Gracias de nuevo. – NJones
De nada. :-) – Aufwind
- 1. Dos UITapGestureRecognizer en el UIView
- 2. UITapGestureRecognizer no se inicia en UIView Subclase
- 3. ¿No se ha agregado UITapGestureRecognizer a un UIView?
- 4. Problema con un UITapGestureRecognizer
- 5. UITapGestureRecognizer no funciona
- 6. ¿Cómo agregar una UIView arriba de una UITableView en iOS?
- 7. Agregar UIView detrás de UITableView en UITableViewController código
- 8. UITapGestureRecognizer en la subvista UIScrollView
- 9. UITapGestureRecognizer initWithTarget: action: ¿método para tomar argumentos?
- 10. Múltiples tomas con UITapGestureRecognizer
- 11. jQuery y MooTools Conflicto
- 12. Conflicto QShortCut y QSpinBox
- 13. jQuery.ui.draggable.js y jQuery.ui.widget.js conflicto
- 14. Cómo llamar al método didSelectRowAtIndexPath con UITapGestureRecognizer?
- 15. Múltiples UITableViews en una UIView
- 16. CONFLICTO (contenido): Conflicto de combinación en
- 17. iOS - UITapGestureRecognizer - Selector con argumentos
- 18. iPhone iOS cómo agregar un UILongPressGestureRecognizer y UITapGestureRecognizer al mismo control y evitar conflictos?
- 19. ¿Puedo usar el patrón de fondo agrupado de UITableView para una UIView?
- 20. detectando dedo arriba/abajo UITapGestureRecognizer
- 21. ¿Cómo implemento UITapGestureRecognizer en mi aplicación?
- 22. personalizada UIView y becomeFirstResponder
- 23. UIView y AutoresizingMask ignoraron
- 24. Puntero PHP y conflicto variable
- 25. IFRAME y posiciones absolutas en conflicto
- 26. Tutorial sobre Cómo arrastrar y soltar elemento de UITableView a UITableView
- 27. UIView shadow y InterfaceBuilder
- 28. UIView y subvistas - opacidad
- 29. ¿Cómo uso un NSMutableArray como un DataSource para mi UITableView
- 30. Eventos para UIView personalizado
[Al establecer este valor en 'NO 'se indica al reconocedor que entregue todos los toques a la vista subyacente, incluso cuando haya reconocido la secuencia.] (Http://developer.apple.com/library/IOs/#documentation/ UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html) – dasblinkenlight
código de ejemplo 'longPressGestureRecognizer.cancelsTouchesInView = NO;' (gracias dasblinkenlight) – tmr
@dasblinkenlight aún no funciona para mí, no puedo realizar los eventos táctiles en mi celda de vista de tabla, no puedo seleccionar los elementos de la celda de vista de tabla, he usado 'tableView de mesa (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 'pero los elementos no se están seleccionando –