2010-02-09 15 views
14

Hay una pregunta similar a esto, pero la respuesta es muy general, vaga. (Detecting UITableView scrolling) Por favor, no se despida. Estoy buscando una solución concreta.Cómo detectar el desplazamiento de UITableView?

Tengo UITableView que tiene un campo de texto editable y aparece PickerView cuando se selecciona otra celda. Lo que necesito es ocultar firstResponder o PickerView cuando el usuario comienza a desplazarse por este UITableView.

Hasta ahora en la pregunta Detecting UITableView scrolling hay una sugerencia que debe subclase UITableView. SI la subclase UITableView sigue siendo interna/privada UIScrollView no está accesible. ¿Cómo accedo al ScrollView principal de UITableView (sin infringir la ley)?

Gracias.

Respuesta

34

No necesita la subclase UITableView para rastrear el desplazamiento. Su UITableViewDelegate puede servir como UIScrollViewDelegate también. Por lo tanto, en su clase delegado puede implementar -scrollViewWillBeginDragging: o el método UIScrollViewDelegate que necesite en su caso. (Como de hecho se sugiere en la pregunta que mencionas)

+1

Gracias, lo tengo. tneed jus para añadir a MyTableViewController @interface: UIViewController y luego implementar -scrollViewWillBeginDragging: Gracias. – Rod

+0

¿Cómo se puede obtener el desplazamiento desde una tabla específica? Digamos por ejemplo que tengo 2 UITableViews? –

+1

@jeraldo, todos los métodos UIScrollViewDelegate aceptan la vista de desplazamiento que lo llama como parámetro, por lo que puede determinar fácilmente con qué UIScrollView está tratando – Vladimir

8

Para ampliar la respuesta de Vladimir, así es como he implementado esta solución:

En archivo .h:

@interface MyViewController : UIViewController <UIScrollViewDelegate> 

En el archivo .m:

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView { 
    //logic here 
} 
1

Tuve el mismo problema, y ​​obtuve algunas ideas de las respuestas anteriores para solucionarlo, pero no solo la aplicación falla si deseo actualizar mientras se está desplazando la vista de tabla, sino también cr cenizas si me desplazo mientras se actualiza. Por lo tanto, la solución extendida para solucionar el problema bajo todas las circunstancias es:


1.1. Deshabilitar el desplazamiento si el usuario ha presionado el botón Actualizar

1.2. Habilite el desplazamiento una vez que el proceso de actualización haya finalizado


2.1. Deshabilite el botón Actualizar si el usuario está desplazándose

2.2. Habilitar el botón de actualización una vez que el usuario ha terminado desplaza


Para implementar la primera parte (1.1, y 1.2..):

-(void)startReloading:(id)sender 
{ 
    ... 
    self.tableView.userInteractionEnabled = NO; 
    // and the rest of the method implementation 
} 

-(void)stopReloading:(id)sender 
{ 
    self.tableView.userInteractionEnabled = YES; 
    // and the rest of the method implementation 
} 

para implementar la segunda parte (2.1, y 2.2..):

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView 
{ 
    barButton.enabled = NO; 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    barButton.enabled = YES; 
} 

Y como se explica en la respuesta anterior UISCrollViewDelegate, se debe establecer en el archivo .h:

@interface MyTableViewController : UITableViewController <UIScrollViewDelegate> 

P.S. Puede usar scrollEnabled en lugar de userInteractionEnabled, pero todo depende de lo que esté haciendo, pero la interacción del usuario es la opción preferida.

6
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
    if (scrollView == myTableView){ 
     // Your code here..... 
    } 
} 
Cuestiones relacionadas