Ios 表视图行的节移动时是否可以保持不变?
我正在尝试创建一个通用的diffing函数,用于在表视图中执行批处理更新。基本上,它采用两个节数组,每个节包含每个节的标识符和每个节中每行的标识符,并计算要删除、插入或移动的节以及要删除、插入或移动的单个行。也就是说,对于deleteSections_u:with:、insertSections_u:with:、moveSection_u:toSection:、deleteRowsat:with:、insertRowsat:with:和moveRowat:to:,适当的输入 我认为这是可以做到的,但似乎我已经找到了可以做到的极限,我只想检查一下我是否遗漏了什么 假设我有两个部分,水果和蔬菜,每个部分都含有一种元素:水果中的香蕉,蔬菜中的胡萝卜 比方说,我想切换,突然香蕉变成了蔬菜,胡萝卜变成了水果。很简单,我生成了一个moveRowat:[0,0],to:[1,0]和一个moveRowat:[1,0],to:[0,0],并相应地更新了我的数据源;这些行将交换位置 现在,让我们换个说法,我想让这两个部分交换位置。我将执行moveSection0、toSection:1,或者我可以执行moveSection1、toSection:0,或者两者都执行-在这种情况下,这并不重要。好啊胡萝卜排现在和蔬菜一起移动,香蕉和水果一起移动 但是现在。。。我想同时做这两件事。节应该交换位置,但项应该保持不变——或者,换句话说,它们应该交换它们所属的逻辑节,但保留它们的物理行。这似乎是不可能的 我尝试执行moveSection,同时==在相同的beginUpdate/endUpdate中执行moveRowat:[0,0],到:[0,0]和moveRowat:[1,0],到:[1,0],但这些对moveRow的调用似乎都是无操作* 我还尝试执行deleteRows/insertRows,使行保持在原来的位置;这反而让我大吃一惊: 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试为单元格创建两个动画” 重新加载行也不起作用;执行与deleteRows/insertRows对相同操作的AIK 所以,基本上我的问题是: 我错过什么了吗?这可能吗 我对使用新数据重新配置单元格或标题之类的变通方法不感兴趣,我实际上不需要这样做,我只是想知道 *实际上,它们与moveSection0,toSection:1和moveSection1,toSection:0组合在一起时就不是ops;如果只执行其中一个,我们就会得到内部一致性崩溃 将switchBothNoOp更改为:Ios 表视图行的节移动时是否可以保持不变?,ios,swift,uikit,Ios,Swift,Uikit,我正在尝试创建一个通用的diffing函数,用于在表视图中执行批处理更新。基本上,它采用两个节数组,每个节包含每个节的标识符和每个节中每行的标识符,并计算要删除、插入或移动的节以及要删除、插入或移动的单个行。也就是说,对于deleteSections_u:with:、insertSections_u:with:、moveSection_u:toSection:、deleteRowsat:with:、insertRowsat:with:和moveRowat:to:,适当的输入 我认为这是可以做到的
func switchBothNoOp() {
switch state {
case .first:
sections = [("Fruits", ["Banana"]),
("Vegetables", ["Carrot"])]
case .second:
sections = [("Vegetables", ["Banana"]),
("Fruits", ["Carrot"])]
}
tableView.moveSection(0, toSection: 1)
}
然后,稍后使用另一个开始/结束更新块移动行。例如:
func update() {
tableView.beginUpdates()
// Pick on of these:
// switchItems()
// switchSections()
switchBothNoOp()
// switchBothCrash()
tableView.endUpdates()
tableView.beginUpdates()
tableView.moveRow(at: [0, 0], to: [1, 0])
tableView.moveRow(at: [1, 0], to: [0, 0])
tableView.endUpdates()
}
别担心。很高兴这有帮助。