Swift 3、交换两个table单元格

Swift 3, Swap two table cells

我主要是一名 Java 程序员,但我一直在学习 swift 并且遇到了一些障碍。

我正在使用 UITableView 创建匹配定义游戏。用户可以 select 一个单元格然后 select 另一个单元格来交换他们的位置。现在的问题是 UITableViews 的 moveRow 方法只将第一个参数移动到第二个参数位置。当间隙大于 0 时,这会产生级联效应。

我很好奇是否有一种简单的方法可以完美地交换 table 视图中两个单元格的位置。

例如,如果您有单元格 1,2,3,4,5,而您 select 2 和 4,则新模式将为:1,4,3,2,5。目前它会显示为 1,3,4,2,5,因为它只移动第一个 selected 单元格。

如有任何帮助,我们将不胜感激!谢谢你。

执行该操作有两个步骤:

  • 交换数据源数组中的项目(无可见效果)。要保留索引,请删除 较高 索引处的项目并将其存储在变量中,然后是较低索引处的项目。但是首先在 lower 插入项目然后在 higher index.
  • 包装在 beginUpdates / endUpdates 块中交换 table 视图中的行。新索引是自动计算的。

    tableView.beginUpdates()
    tableView.moveRow(at: indexPath1, to: indexPath2)
    tableView.moveRow(at: indexPath2, to: indexPath1)
    tableView.endUpdates()
    

    注意:如果您正在使用 move 操作,您 之后不得 调用 reloadData()