如何制作可以永久滚动的表格视图?

时间:2010-04-29 16:14:44

标签: iphone uitableview

我有一组100行,非常类似于可以在选择器中选择的值。当用户滚动表格时,我希望将行作为永久正在进行的装配带来追加。因此,当用户向下滚动并到达行100并进一步滚动时,表视图将再次显示第1行,依此类推。反方向同样的事情。

我的想法:

  • 不显示滚动指示符(可能没什么意义)
  • 在numberOfRows委托方法中返回什么值?这个无限常数?
  • 在cellForRowAtIndexPath中的
  • :只需在超出边界时将索引包裹起来?

3 个答案:

答案 0 :(得分:3)

许多应用都是这样做的。这个想法是表的开头始终是相同的,但你不断添加到最后,所以表只是不断增长。

假设您首先拥有100个数据元素。您的numberOfRows返回101。前100个细胞是正常的。滚动指标仍然有意义。

如果显示第101个单元格,则会在单元格中显示UIActivityIndi​​cator等进度指示器,并启动该过程以加载下一行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,该怎么办?