2

如何以编程方式从分组部分中添加或删除单元格?

我使用情节提要中的静态单元格创建了一个分组的表格视图。在情节提要中,我使用 Attribute Inspector 面板设置了行数。例如,对于第 1 节,我定义了 3 行。然后使用 3 个项目的 NSMutableArray,我可以在启动时正确地将值加载到每个部分中。

我最终希望能够在运行时添加/删除单元格。该部分尚未编码,但为了模拟添加新单元格的场景,我在代码中的数组中添加了一个新项目,但没有增加“属性检查器”面板中该部分的行数。我曾希望我不需要进行任何其他更改来容纳新项目,因为在 numberOfRowsInSection 方法中,我正在返回特定部分的数组计数。

这是我重新运行代码时收到的错误消息:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]”

显然我需要以某种方式指定额外的行数。谁能阐明我如何在运行时做到这一点?谢谢。

4

3 回答 3

1

你不应该通过属性检查器来做。它禁止您进行单元格的动态插入和删除。尝试

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [yourArray count];
}

否则这样做。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(section==0){
       return 3;
    }else if(section==1){
       return 4;
    }
 return 0;
}

如果您有很多部分,则依此类推。..当您从中读取数据的数组更新时,您可以重新加载整个表..

[tableView reloadData];

但更好的方法是在一个块中插入一行或多行这样的行。

[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:yourIndexPath withRowAnimation:UITableViewRowAnimationRight];
[tableView endUpdates];

您还可以添加动画以从右侧或 lect 或顶部或底部添加单元格。

我希望这可以帮助你!!干杯!!

于 2012-09-22T09:59:03.000 回答
0

我猜你硬编码了你的部分的行数。因为查看错误,您的部分似乎需要 4 个对象,但您的数据源仅包含 3 个。

在你的内部:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

您应该返回类似 [myArray count] 的内容,因此如果您从数组中添加或删除对象,添加或删除行应该不是问题。

于 2012-09-22T09:59:28.600 回答
0

您在 UITableview 中有用于插入和删除行的预定义方法,对于插入我们可以使用 insertRowAtIndexPath 方法,对于删除使用 deleteRowAtIndexPath 方法。

于 2012-09-22T09:59:34.393 回答