Как проверить, когда UITableView выполняется прокрутка

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

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

Ответ 1

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

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

В приведенном выше методе делегата 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.

Ответ 2

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

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

Ответ 3

UITableView соответствует UIScrollViewDelegate. Пожалуйста, обратитесь к документации этого протокола, у вас есть методы, которые вам нужны.

Ответ 4

После использования shanegao answer и комментария Jovan Stankovic, я разработал это для 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
    }
}