2013-05-13 10 views
12

C'è un modo per controllare se il mio tableview ha appena finito di scorrere? table.isDragging e table.isDecelerating sono gli unici due metodi che riesco a trovare. Non sono sicuro di come sia possibile anticipare o ricevere notifiche quando la vista tabella termina lo scorrimento.come controllare quando UITableView ha finito di scorrere

Posso in qualche modo utilizzare i timer per controllare ogni secondo se il TableView sta scorrendo o no?

risposta

0

UITableView è conforme a UIScrollViewDelegate. Per favore, fai riferimento alla documentazione di quel protocollo, ha i metodi che ti servono.

30

Si potrebbe implementare UIScrollViewDelegate metodo di protocollo come segue:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) { 
     [self scrollingFinish]; 
    } 
} 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    [self scrollingFinish]; 
} 
- (void)scrollingFinish { 
    //enter code here 
} 

Per il metodo delegato sopra The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration. Quando la vista decelerato di fermarsi, il parametro decelerate sarà NO.

Secondo uno utilizzato per lo scorrimento lento, anche lo scorrimento a scorrimento quando si tocca il dito, come indicato da Apple Documenti, when the scrolling movement comes to a halt.

+1

L'utente può anche invocare tavolo di scorrimento toccando la parte superiore dello schermo. Sfortunatamente, in questo caso scrollViewDidEndDecelerating non viene chiamato, quindi dobbiamo implementare scrollViewDidScrollToTop per gestire questo caso. –

+0

Questa risposta è la migliore, e @JovanStankovic, sei molto corretto. –

4

Il codice seguente ti aggiornerà ogni volta che lo scorrimento dell'utente si interrompe.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
    { 
     if (isScrollingStart) 
     { 
      isScrollingStart=NO; 
      [self scrollingStopped]; 
     } 
    } 
} 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 

    if (isScrollingStart) 
    { 
     isScrollingStart=NO; 
     [self scrollingStopped]; 
    } 
} 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    isScrollingStart=YES; 
} 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    isScrollingStart=YES; 
} 
-(void)scrollingStopped 
{ 
    NSLog(@"Scrolling stopped"); 
} 
+0

Funziona molto bene, grazie. Il valore 'isScrollingEnd' è scritto ma mai usato. C'è solo nel caso tu abbia bisogno di usarlo? Volevi controllarlo scorrendo? – oyalhi

+0

Aggiornato ans. , non c'è alcun uso di isScrollingEnd qui :) –

+0

Grazie! Funziona bene. – Raja

0

Dopo aver utilizzato shanegao's answer e il commento di Jovan Stankovic su di esso, ho ideato questo per Swift3 -

extension NMViewController: UIScrollViewDelegate { 
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
     if !decelerate { 
      scrollViewDidEndDecelerating(scrollView) 
     } 
    } 

    func scrollViewDidScrollToTop(_ scrollView: UIScrollView) { 
     scrollViewDidEndDecelerating(scrollView) 
    } 

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 
     // Your logic to handle after scrolling is done 
    } 
} 
Problemi correlati