it-swarm.com.de

wie zu prüfen ist, wann UITableView gescrollt wurde

Gibt es eine Möglichkeit zu überprüfen, ob meine Bildansicht gerade mit dem Scrollen fertig ist? table.isDragging und table.isDecelerating sind die einzigen zwei Methoden, die ich finden kann. Ich bin mir nicht sicher, wie ich vorhersehen oder benachrichtigt werden kann, wenn der TableView das Scrollen beendet hat.

Kann ich mit Hilfe von Timern im Sekundentakt prüfen, ob die tableView gerade scrollt oder nicht?

17
sankaet

Sie würden die UIScrollViewDelegate-Protokollmethode folgendermaßen implementieren:

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

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    [self scrollingFinish];
}

- (void)scrollingFinish {
    //enter code here
}

Schnelle Version

public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if decelerate {
        scrollingFinished()
    }
}

public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    scrollingFinished()
}

func scrollingFinished() {
    print("scrolling finished...")
}

Für die obige 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 abgebremst wurde und der Stopp beendet wurde, ist der Parameter decelerateNO.

Die zweite Funktion wird für langsames Scrollen verwendet. Das Scrollen stoppt sogar, wenn Sie Ihren Finger berühren, wie Apple Documents sagte: when the scrolling movement comes to a halt.

35
shanegao

Mit dem folgenden Code werden Sie jedes Mal aktualisiert, wenn der Bildlauf des Benutzers angehalten wurde.

- (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");
}
5
Pandey_Laxman

UITableView entspricht UIScrollViewDelegate. Bitte beziehen Sie sich auf die Dokumentation dieses Protokolls. Es enthält Methoden, die Sie benötigen.

1
Jeepston

Nachdem ich die Antwort von shanegao und Jovan Stankovics Kommentar dazu verwendet hatte, habe ich mir dies für Swift3 ausgedacht -

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
    }
}
0
Nikhil Manapure