2009-10-19 28 views
56

He subestimado UITableView (como KRTableView) e implementado los cuatro métodos táctiles (touchesBegan, touchesEnded, touchesMoved y touchesCancelled) para poder detectar cuándo se está manejando un evento táctil en una UITableView . Esencialmente, lo que necesito detectar es cuando el UITableView se desplaza hacia arriba o hacia abajo.Detectando el desplazamiento de UITableView

Sin embargo, la subclase de UITableView y la creación de los métodos anteriores solo detecta cuándo se produce el desplazamiento o el movimiento de los dedos dentro de una UITableViewCell, no en todo el UITableView.

Tan pronto como mueva mi dedo a la siguiente celda, los eventos táctiles no harán nada.

Esta es la forma en que estoy de subclases UITableView:

#import "KRTableView.h" 


@implementation KRTableView 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesBegan:touches withEvent:event]; 
    NSLog(@"touches began..."); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesMoved:touches withEvent:event]; 
    NSLog(@"touchesMoved occured"); 
} 

- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event { 
    [super touchesCancelled:touches withEvent:event]; 
    NSLog(@"touchesCancelled occured"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    NSLog(@"A tap was detected on KRTableView"); 
} 

@end 

¿Cómo puedo detectar cuando el UITableView se desplaza hacia arriba o hacia abajo?

Respuesta

142

No necesita interceptar los métodos de evento. Compruebe los documentos para el protocolo UIScrollViewDelegate e implemente los métodos -scrollViewDidScroll: o -scrollViewWillBeginDragging: según corresponda a su situación.

+0

viewDidScroll es seguir siendo llamados, siempre y cuando se está desplazando. Entonces no puedes configurar tu variable isDragging en galse en scrollViewDidScroll. –

+0

¿ES POSIBLE DISTINGUIR ENTRE SUBIR O BAJAR? – Markus

+0

@Markus https://stackoverflow.com/questions/2543670/finding-the-direction-of-scrolling-in-a-uiscrollview – tdios

38

me gustaría añadir lo siguiente:

Si está trabajando con un UITableView es probable que ya está implementando la UITableViewDelegate para llenar la tabla con datos.

El UITableViewDelegate protocolo se ajusta a UIScrollViewDelegate, por lo que todo lo que necesita hacer es poner en práctica los métodos -scrollViewWillBeginDragging y -scrollViewDidScroll directamente en su aplicación UITableViewDelegate y que se llamará automáticamente si la clase de implementación se establece como delegado a su UITableView.

Si también desea interceptar los clics en su tabla y no solo arrastrar y desplazarse, puede ampliar e implementar su propia UITableViewCell y utilizar los métodos touchesBegan: allí. Al combinar estos dos métodos, podrá hacer la mayoría de las cosas que necesita cuando el usuario interactúa con UITableView.

1

Fue mi error, intenté llamar al método antes de volver a cargar la tabla. El siguiente código me ayudó a resolver este problema.

[mytableview reloadData];

[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Cuestiones relacionadas