UITableView scrollViewDidScroll:多次调用stop函数

时间:2014-07-01 15:32:42

标签: ios objective-c uitableview uiscrollview

在我的UITableView中,当用户滚动到底部时,如果有更多内容可用,我会使用scrollViewDidScroll:加载更多单元格。

我使用NSRange来确定表中显示了plist中的哪些信息以及已加载了多少个单元格。

因此,如果用户点击plist中的索引12,则表格将显示包含该信息的单元格。 NSRange:{12,1} - >索引12,1行

现在用户滚动到底部,加载并显示新单元格。 NSRange:{12,2} - 索引12,2行等

我的问题是更新表的函数被多次调用。因此,当表格应该只加载一个以下的单元格时,会更新多次,这会导致行数增加到大于1。

有没有办法避免在我的代码中多次调用函数?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat currentOffset = scrollView.contentOffset.y;
    CGFloat maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;

    CGFloat loadDelta = - 75

    if (maximumOffset - currentOffset <= loadDelta &&
        _commentsRange.length != [[Content manager] numberOfComments]  &&
        scrollView.isDragging) // load new cell below
    {

        // this gets called multiple times:

        [_largeContentTableView beginUpdates];
        [self addBottomRange];
        [_largeContentTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:(_commentsRange.length - 1) inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
        [_largeContentTableView endUpdates];

        return;
    }

    ...

}

- (void)addBottomRange
{
    _commentsRange = NSMakeRange(_commentsRange.location, (_commentsRange.length + 1));
}

非常感谢!

0 个答案:

没有答案