Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView scrollViewDidScroll:停止函数被多次调用_Ios_Objective C_Uitableview_Uiscrollview - Fatal编程技术网

Ios UITableView scrollViewDidScroll:停止函数被多次调用

Ios UITableView scrollViewDidScroll:停止函数被多次调用,ios,objective-c,uitableview,uiscrollview,Ios,Objective C,Uitableview,Uiscrollview,在我的UITableView中,我使用scrollViewDidScroll:在用户滚动到底部时,如果有更多内容可用,则加载更多单元格 我使用NSRange确定表中显示了plist中的哪些信息以及已加载的单元格数量 因此,如果用户单击plist中的索引12,该表将显示一个包含该信息的单元格。NSRange:{12,1}->索引12,1行 现在用户滚动到底部,一个新的单元格被加载并显示。NSRange:{12,2}-索引12,2行,等等 我的问题是更新表的函数被多次调用。因此,当表应该只加载范围下

在我的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));
}

非常感谢

问题与scrollViewDidScroll有关,顾名思义,scrollViewDidScroll在每次滚动时都会触发。再加上插入新行的条件取决于某个偏移值,您基本上会进入一种状态,在这种状态下,您可以并确实多次开火。当您到达底部时,还有其他方法可以检测,例如: