it-swarm.com.ru

как проверить, когда UITableView завершает прокрутку

Есть ли способ проверить, закончилась ли прокрутка в моем табличном представлении? table.isDragging и table.isDecelerating - это только два метода, которые я могу найти. Я не уверен, как я могу либо предвидеть, либо получать уведомления, когда просмотр таблицы завершает прокрутку.

Можно ли как-то использовать таймеры для проверки каждую секунду, прокручивается ли tableView или нет?

17
sankaet

Вы бы реализовали метод протокола UIScrollViewDelegate следующим образом:

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

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

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

Swift версия

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

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

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

Для описанного выше метода делегата The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration., когда представление замедляется до остановки, параметр decelerate будет NO.

Второй используется для медленной прокрутки, даже прокрутка останавливается, когда палец подправляется, как сказали в Apple Documents, when the scrolling movement comes to a halt.

35
shanegao

Приведенный ниже код будет обновлять вас каждый раз, когда прокрутка пользователя остановлена.

- (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 соответствует UIScrollViewDelegate. Пожалуйста, обратитесь к документации этого протокола, у него есть методы, которые вам нужны.

1
Jeepston

Пользуясь ответом Шанегао и комментарием Йована Станковича, я разработал это для 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
    }
}
0
Nikhil Manapure