我有一组100行,非常类似于可以在选择器中选择的值。当用户滚动表格时,我希望将行作为永久正在进行的装配带来追加。因此,当用户向下滚动并到达行100并进一步滚动时,表视图将再次显示第1行,依此类推。反方向同样的事情。
我的想法:
答案 0 :(得分:3)
许多应用都是这样做的。这个想法是表的开头始终是相同的,但你不断添加到最后,所以表只是不断增长。
假设您首先拥有100个数据元素。您的numberOfRows返回101。前100个细胞是正常的。滚动指标仍然有意义。
如果显示第101个单元格,则会在单元格中显示UIActivityIndicator等进度指示器,并启动该过程以加载下一行100行。数据到达后,您可以使用UITableView reloadData重新加载整个表格,也可以使用UITableView insertRowsAtIndexPaths:withRowAnimation:单独插入新单元格。
所以,你只要无限追加到桌子上。这比尝试将表保持为始终位于N个单元格/行并从表的开头卸载的“窗口”更容易。如果您需要这种窗口,您可以重新考虑这是否真的是与您的数据进行交互的最佳方式。
答案 1 :(得分:3)
我刚刚完成了这个变种。
让我们假设您有100行,其中8行适合屏幕。首先添加最后8行,然后正常添加100行,然后添加最后8行。使用setContentOffset将表视图重新输入到100的第一行。
当用户滚动到第100个以下时,他将看到第1-8行,你可以在viewDidScroll委托函数中检测到这一点并将滚动重新定位回第一个记录(确保你在执行此操作时将动画标记设置为NO )。类似地,当用户滚动超过1时,他/她将看到最后8条记录,您可以再次重新显示滚动视图以显示100行部分中的最后8条记录。
这实际上实现了圆形滚动,用户可以继续向两个方向滚动。
答案 2 :(得分:2)
我没试过,但这是一个想法。假设N = 100,因为你有100行。我们要做的是告诉tableview我们有200行,但我们会让用户在50-150范围内滚动。
告诉(tableview)你有两倍的行数,所以对于numberOfRows,返回2 * N.在cellForRowAtIndexPath中,始终返回与(行%N)对应的单元格。
现在将表格滚动到第N行(而不是0),以便用户可以向任一方向滚动。
当用户向上滚动时,tableview将最终要求行N +(N / 2),当发生这种情况时,发送scrollToRowAtIndexPath:atScrollPositionanimated:滚动到行-N。这会将表重新定位N(即:从150到50),相同的单元格,但我们永远不会以这种方式从表格的末端运行。
当tableview要求第N(N / 2)行的单元格向上滚动时,执行相同操作。
你将不得不处理特殊情况,其中N个单元格在视图中具有额外的空间,即:如果N为1,该怎么办?