关于ios的表示图问题,UITableView

发布于 2022-08-29 17:30:06 字数 514 浏览 17 评论 0

就是在删除某行的时候为什么要先删除数据模型中的实例
例如以下例子:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [_items removeObjectAtIndex:indexPath.row];
    //为什么要有以上代码,不要以上代码为什么不行,_items是一数组,而且放在后面这行代码的后面也不行这是为什么

    NSArray *indexPaths = @[indexPath];  //还有这段代码能具体解释下吗
    [tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

深爱不及久伴 2022-09-05 17:30:06

首先解释下

[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];

这个是对界面的操作,用了点动画删除了你要删除的那一行,只是操作UI,不操作数据。

然后

[_items removeObjectAtIndex:indexPath.row];

这个才是真正的操作数据。你这个_items应该是tableView的dataSource吧?只有在操作UI的时候把数据源(_items)里边的数据真正的删除了,在

[tableView reloadData]

的时候,你之前删掉的数据才不会再重新显示出来啊。

至于那两行代码为什么必须是那个顺序,就不知道了...希望有高手来回答一下,我们学习一下~

回答中有不对的地方请各位批评指正

梦回梦里 2022-09-05 17:30:06

NSArray *indexPaths = @[indexPath];
这行代码新建了一个数组指针,指向传过来的下标。注意,这只是个指针,对其的操作会影响到indexPath
如果你在下面那行中将object删去,那么指针指向的indexPath也会受到影响,因而之后再调用indexPath的时候,其值已经发生改变。建议你在这两行代码之中,在日志里输出indexPath的值(或者row的值),看看是否发生了变化。

桃扇骨 2022-09-05 17:30:06
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];

上述代码你可以看作

[self.tableView reloadData];

两者区别在于,第一种只是针对某一行(Cell)删除,而不必更新整个UITableView而造成资源浪费,同时亦提供了更好看的特效;第二种方法更生硬一些

光这个方法很难有说服力,下面我拿

[tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];

来做例子

假设我们是新增行,如果你先调用了insertRowsAtIndexPaths:withRowAnimation:
UITableView将调用tableView:cellForRowAtIndexPath:去获取新增行的cell

想必在代码tableView:cellForRowAtIndexPath:里面你们都会这样写

NSDictionary *dataDictionary = _items[indexPath.row];

很明显因为你没有添加数据,这里会造成访问越界

这就是为什么在更新UITableView的UI时候,必先进行数据更新的原因

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文