在我的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),它会引发异常。
知道我怎么可能实现这个目标吗?
由于
答案 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版本,看看是否会更容易实现... 谢谢!