【问题标题】:indexpath.row keeps resetting after I introduced sectionsindexpath.row 在我介绍部分后不断重置
【发布时间】:2014-09-15 10:37:28
【问题描述】:

我在 UITableview 中添加了动态生成的部分。我有一小段代码可以计算出将节标题放在哪个索引处。所以我的numberOfSectionsInTableViewnumberOfRowsInSection 代码效果很好。

问题是我的 tableview 看起来像这样,比如我的 numberOfRowsInSection 返回 2、3、5:

-==A==-
亚伦
亚历克斯
-==B==-
亚伦
亚历克斯
阿尔弗雷德
-==C==-
Aaron
Alex
Alfred
Bart
Casey

所以基本上每次新部分开始时,indexPath.row 都会重置回 0?

有没有办法解决这个问题?还是我必须自己繁琐地维护每个单元格需要哪个indexPath.row

现在看来我必须遍历我的名字数组,找出我所在的indexPath.section,然后去计算每个部分有多少个字母并计算偏移量。

【问题讨论】:

  • 这是正常的,每个部分的行重置。您可以修改您的数据结构以拥有一个数组(对于节)数组(对于行)并返回 array[section].count 的 numberofrowsinsection。
  • 我想补充一点:在你的假设索引路径将是徒劳的。它专门设计用于在整个阵列中发现。这些协议方法旨在像现实一样工作。你说的是“第二节第一行”,对吧?这就是你必须考虑的方式。
  • 再想一想:捷径确实是计算绝对指数,这取决于你用它做什么。如果您以后想弄乱单元格高度和动态添加/过滤,请考虑数组中的数组,否则绝对索引将变得很麻烦。

标签: ios uitableview sections


【解决方案1】:

indexPath 包含一行和一个部分。您可以通过添加前面的部​​分及其行来计算绝对行:

NSInteger absoluteRow = indexPath.row;

for(int section = 0; section < indexPath.section; ++section)
{
    absoluteRow += [tableView numberOfRowsInSection:section];
}

另一种(我认为更好)的方法是使用二维数组作为数据结构。该数组包含部分,每个部分都包含该部分的行。您可以使用以下方法加载数据:

[[array objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

【讨论】:

  • 我尝试了 absoluteRow 的东西,当你滚动时由于某种原因它不起作用。我认为这是因为如果您显示了半个部分,那么偏移量就会变得混乱。我将硬着头皮改变我的基本数据结构。
  • arg 当然不行,抱歉。您必须添加所有以前的部分。我更新了我的答案。
  • 太棒了,做到了。不得不改变我的数据结构将是一个 PITA 并且会减慢速度。谢谢。
【解决方案2】:

是的,您需要告诉每个部分的行要显示什么。一种简单的方法是使用一个字典,其中节名称作为键,这些键的值作为包含每个节的特定项目的数组。

您可能需要使用字典方法在此处添加某种排序功能,但如果您使用名称,那么按字母顺序排序可能是您想要的功能。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多