2013-05-13 12 views
12

Gibt es eine Möglichkeit zu überprüfen, ob meine Tabelle gerade Scrollen beendet? table.isDragging und table.isDecelerating sind die einzigen zwei Methoden, die ich finden kann. Ich bin mir nicht sicher, wie ich entweder vorwegnehmen oder benachrichtigt werden kann, wenn die Tabellenansicht beendet ist.wie überprüft man, wenn UITableView scrollen

Kann ich irgendwie Timer verwenden, um jede Sekunde zu überprüfen, ob die TableView scrollt oder nicht?

Antwort

0

UITableView entspricht UIScrollViewDelegate. Bitte beachten Sie die Dokumentation dieses Protokolls, es hat Methoden, die Sie benötigen.

30

Sie würden UIScrollViewDelegate Protokollverfahren wie folgt implementieren:

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

Für die oben Delegatmethode The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration. Wenn die Ansicht zu stoppen verzögert wird, wird der Parameter decelerateNO sein.

Zweite für das Scrollen langsam verwendet, auch Scroll-Stop, wenn Ihr Finger nach oben, wie Apple Dokumente, sagte when the scrolling movement comes to a halt.

+1

Benutzer auch Tabelle blättern durch Antippen der oberen Rand des Bildschirms aufrufen kann. Leider wird in diesem Fall scrollViewDidEndDecelerating nicht aufgerufen, daher müssen wir scrollViewDidScrollToTop implementieren, um diesen Fall zu behandeln. –

+0

Diese Antwort ist am besten, und @JovanStankovic, Sie sind sehr korrekt. –

4

Der unten stehende Code aktualisiert Sie jedes Mal, wenn der Benutzer den Bildlauf stoppt.

- (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

Funktioniert sehr gut, danke. Der Wert 'isScrollingEnd' wird geschrieben aber nie benutzt. Gibt es nur für den Fall, dass Sie es verwenden müssen? Wolltest du es in ScrollingStopped überprüfen? – oyalhi

+0

Aktualisiert ans. Es gibt keinen Gebrauch von isScrollingEnd hier :) –

+0

Danke! Es funktioniert gut. – Raja

0

Nach shanegao's answer und Jovan Stankovic kommentieren Sie es, ausgedacht ich dies für 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 
    } 
} 
Verwandte Themen