2013-05-13 7 views
12

Czy istnieje sposób sprawdzenia, czy mój widok tabeli właśnie zakończył przewijanie? table.isDragging i table.isDecelerating to jedyne dwie metody, jakie mogę znaleźć. Nie jestem pewien, jak mogę przewidzieć lub otrzymać powiadomienie, gdy przeglądanie tabeli zakończy się przewijaniem.Jak sprawdzić, kiedy UITableView jest przewijane?

Czy mogę w jakiś sposób użyć liczników do sprawdzenia co sekundę, jeśli tabela jest przewijana, czy nie?

Odpowiedz

0

UITableView jest zgodny z UIScrollViewDelegate. Proszę zapoznać się z dokumentacją tego protokołu, ma on potrzebne metody.

30

byłoby zaimplementować UIScrollViewDelegate metody protokołu następująco:

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

dla wyżej metody delegata The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration. Gdy widok hamować do zatrzymania, parametr decelerate będzie NO.

Drugi używany do przewijania powoli, a nawet przewijania, gdy palec dotknie, jak powiedział Apple Documents, when the scrolling movement comes to a halt.

+1

Użytkownik może również powołać stołowego zwój dotykając górnej części ekranu. Niestety, w tym przypadku scrollViewDidEndDecelerating nie jest wywoływane, więc musimy zaimplementować scrollViewDidScrollToTop do obsługi tego przypadku. –

+0

Ta odpowiedź jest najlepsza, a @JovanStankovic, masz rację. –

4

Poniższy kod zaktualizuje Cię za każdym razem, gdy przewijanie użytkownika zostało zatrzymane.

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

Działa bardzo ładnie, dziękuję. Wartość 'isScrollingEnd' jest zapisana, ale nigdy nie używana. Czy na wszelki wypadek trzeba go użyć? Czy chciałeś to sprawdzić przewijając? – oyalhi

+0

Zaktualizowano ans. , nie ma tu zastosowania isScrollingEnd :) –

+0

Dziękujemy! Działa dobrze. – Raja

0

Po użyciu shanegao's answer i komentarz Jovan Stanković nad tym, że wymyślił to dla 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 
    } 
}