是否可以将tableView.moveRow用于具有动态分段数的表?

时间:2018-01-23 13:22:43

标签: ios swift

我正在尝试创建一个包含动态数量的部分的表。这导致tableView.moveRow崩溃,即使我在调用它之前更新了数据源。

E.g。)

  

A B | ---列表中的A和B. section = 1,section = 2

中的行数      

A | B --- A在第0节和B在第1节中。节数= 2,每节中的行= 1

我在-[UITableView _endCellAnimationsWithContext:]中一直收到断言,我想知道这是否是UITableView无法触及的,或者我的代码中是否有错误?

我的代码是

let (fromPath, toPath) = viewModel.moveItem(A) // Creates new section and moves A to the new section below
dprint("Move \(A.name) from \(fromPath) to \(toPath)")
tableView.moveRow(at: fromPath, to: toPath)

输出

  

将A从[0,0]移动到[1,0]

     

2018-01-23 13:59:45.705931 + 0100 MyApp [44553:638288] ***断言失败 - [UITableView _endCellAnimationsWithContext:],/ BuildRoot / Library / Cache / com.apple.xbs / Source / UIKit_Sim /UIKit-3698.33.6/UITableView.m:1826

1 个答案:

答案 0 :(得分:1)

使用tableViewtableView.beginUpdates()附加对tableView.endUpdates()的更改。

此外,您还必须注意创建新的部分,而更改数据模型将在数据中创建一个新部分,您必须告诉tableView在移动行之前插入一个新部分:

let (fromPath, toPath) = viewModel.moveItem(A) // Creates new section and moves A to the new section below
dprint("Move \(A.name) from \(fromPath) to \(toPath)")
tableView.beginUpdates()
if newSectionWasCreated {
    tableView.insertSections([toPath.section], with: .automatic)
}
tableView.moveRow(at: fromPath, to: toPath)
tableView.endUpdates()

您必须根据模型弄清楚如何自己确定newSectionWasCreated