保持最少量的单元格,仍然使用commitEditingStyle

时间:2011-10-27 14:01:13

标签: iphone objective-c uitableview

在我的TableView中,我想要显示至少3个单元格。如果没有单元格,则显示3个虚拟单元格,如果有一个单元格,则显示此单元格和2个“虚拟单元格”,其中有2个单元格,显示它们和一个虚拟单元格,如果有3个单元格,则显示这3个单元格,如果有4,则显示那些,等等。

所以我实现了commitEditingStyleForRowAtIndexPath,它会正常工作,如果我没有

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   if ([self.piggyBanks count]< 3) {
       return 3;
    }
    else{
        return [self.piggyBanks count];
    }
 }

因为它预计在删除后减少一行,如果我从3到2或更少的单元格(因此在numberOfRowsForSection中再次返回3),它会引发异常。

知道我怎么可能实现这个目标吗?

由于

2 个答案:

答案 0 :(得分:1)

commitEditingStyleForRowAtIndexPath中,如果要被虚拟行替换,请不要删除要删除的行。相反,告诉tableView重新加载该特定行。

答案 1 :(得分:0)

This forum post跟踪了我的解决方案。

这有点复杂,也许我会稍后尝试edsko的版本,但我认为这也可能成为一个问题,因为我不得不诉诸细胞..

主要的问题是,当我有1个真实单元格时,我有2个虚拟单元格,所以最后返回的numberOfRows是3.如果我删除剩下的一个单元格,则commitEditing要求2作为新结果,但它要么3,如果我只是说,如果我的数组计数小于3,则返回3,否则它将为0,如果我明确返回数组计数。

所以基本上我做了论坛帖子建议的内容,但也创建了一个属性,存储了最后返回的numberOfRows。如果从commitEditing调用numberOfRows,我将首先返回最后提交的数字-1,而不是重新加载数据,这次是我真正需要的值。

这只有在我一次删除一行时才会起作用,但我的应用程序的设置并不能同时删除超过1行..所以这对我有用..不那么优雅,但可能..

我将在稍后尝试edskos版本,看看是否会更容易实现... 谢谢!