2011-12-27 5 views
37

quiero para detectar si la vista mitabla se ha desplazado, he intentado todos los eventos de toque como ésta:UITableView desplazamiento caso

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
    [super touchesBegan:touches withEvent:event]; 
    //my code 
    } 

pero parece que todos los eventos de toque no lo hacen respuesta a desplazarse pero única respuesta cuando se tocan, mueven, ... etc.

¿Hay alguna forma de detectar el evento de desplazamiento de UITableView?

+2

Consulte esta [Touch Eventos en UIScroll Ver en iPhone] (http: // stackoverflow .com/a/3603140/1072867) – akk

Respuesta

107

Si implementa el protocolo UITableViewDelegate, también se puede poner en práctica uno de los métodos UIScrollViewDelegate:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 

o

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

Por ejemplo, si usted tiene una propiedad llamada tableView:

// ... setting up the table view here ... 
self.tableView.delegate = self; 
// ... 

// Somewhere in your implementation file: 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    NSLog(@"Will begin dragging"); 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    NSLog(@"Did Scroll"); 
} 

Esto es porque UITableViewDelegate se ajusta a UIScrollViewDelegate, como se puede ver en la documentación o en el archivo de encabezado.

+0

¡Funciona, gracias! –

+1

¿Qué pasa cuando tenemos más de una UITableView? – Solidus

+1

Debería poder establecer el delegado de ambas vistas de tabla en 'self' y luego verificar cuál se desplazó usando' scrollView' que se pasa. [Ver aquí] (http://pastebin.com/FzmcYNzv). – fabian789

6

Si tiene más de una vista de tabla como solicitada por Solidus, puede convertir la vista de desplazamiento desde la devolución de llamada a la vista de tabla como UITableView derivada de UIScrollView y luego compararla con las vistas de tabla para encontrar la vista de tabla fuente.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  
     UITableView* fromTableView = (UITableView*) scrollView; 
     UITableView* targetTableView = nil; 
     if (fromTableView == self.leftTable) { 
      targetTableView = self.leftTable; 
     } else { 
      targetTableView = self.rightTable; 
     } 
... 
} 
+0

perfecto, esto me ayudó – Paul

1

Estos son los métodos de UITableViewDelegate para Swift 3 para detectar cuando un UITableView se desplazará o lo hicieron de desplazamiento:

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 

} 

func scrollViewDidScroll(_ scrollView: UIScrollView) { 

} 
Cuestiones relacionadas