在iOS表格视图中,如何将行移动到新的部分?

在iOS表格视图中,如何将行移动到新的部分?,第1张

概述我有一个表格视图,在一个部分中有两行,即 ---Row ARow B 如果我想将第1行设置为新部分的动画,即最终结果为: ---Row B---Row A 该如何实现?我已经尝试过的是: [self.tableView beginUpdates];[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow: 我有一个表格视图,在一个部分中有两行,即
---Row ARow B

如果我想将第1行设置为新部分的动画,即最终结果为:

---Row B---Row A

该如何实现?我已经尝试过的是:

[self.tableVIEw beginUpdates];[self.tableVIEw deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow: 0 inSection: 0]] withRowAnimation:UItableVIEwRowAnimationNone];[self.tableVIEw insertSections:[NSIndexSet indexSetWithIndex: 1] withRowAnimation:UItableVIEwRowAnimationNone];[self.tableVIEw endUpdates];

但是,至少在iOS 8中,该行会动画,但是新的部分是未渲染的(即白色,没有底行边框),直到某些东西触发重绘并返回之后.

[self.tableVIEw beginUpdates];[self.tableVIEw moveRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] toIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];[self.tableVIEw endUpdates];

这提出了一个例外:

InvalID update: invalID number of sections. The number of sections contained in the table vIEw after the update (2) must be equal to the number of sections contained in the table vIEw before the update (1),plus or minus the number of sections inserted or deleted (0 inserted,0 deleted).

和:

[self.tableVIEw beginUpdates];[self.tableVIEw insertSections:[NSIndexSet indexSetWithIndex: 1] withRowAnimation:UItableVIEwRowAnimationNone];[self.tableVIEw moveRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] toIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];[self.tableVIEw endUpdates];

这引发了异常:

cannot move a row into a newly inserted section (1)

我应该根本没有动画并重新加载整个桌子吗?

解决方法 您需要分两步执行此 *** 作.

首先,您需要添加该部分;您需要告诉您的数据源以考虑新部分.对于像你这样的简单例子,你可以设置一个变量:

- (NSInteger)numberOfSectionsIntableVIEw:(UItableVIEw *)tableVIEw {    if(hasTwoSections)        return 2;    return 1;}

然后,您要在哪里触发动画,请致电:

hasTwoSections = true;  // this needs to be set before endUpdates[self.tableVIEw beginUpdates];[self.tableVIEw insertSections:[NSIndexSet indexSetWithIndex: 1] withRowAnimation:UItableVIEwRowAnimationautomatic];[self.tableVIEw endUpdates];

此时,tableVIEw将调用数据源方法以根据您的更改更新表.

添加该部分后,您可以在另一个更新块中将该行移动到该部分:

[self.tableVIEw beginUpdates];[self.tableVIEw moveRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] toIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];[self.tableVIEw endUpdates];

显然,您需要更新numberOfRowsInSection返回的帐户以进行更改.

虽然这是两个步骤,但它看起来会一下子发生.

总结

以上是内存溢出为你收集整理的在iOS表格视图中,如何将行移动到新的部分?全部内容,希望文章能够帮你解决在iOS表格视图中,如何将行移动到新的部分?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存