快速uitableview重新排序除最后一个单元格以外的单元格

时间:2018-10-31 09:19:44

标签: ios swift uitableview uitableviewrowaction

几天前,我从Stack Overflow收到了很好的建议。这是为了防止最后一个单元格在UITableView中移动。它使用以下代码。

func tableView (_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        if indexPath.row <myTableviewArray.count {
            return true
        }
        return false
    }

我用来移动单元格的代码是:

func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
        if destinationIndexPath.row != menuDic.count {
            let movedObject = menuDic[sourceIndexPath.row]
            menuDic.remove(at: sourceIndexPath.row)
            menuDic.insert(movedObject, at: destinationIndexPath.row)
        }
    }

但是有一个意外的问题。另一个单元正在最后一个单元下方移动!除最后一个单元格外,其他单元格不得移至最后一个单元格下方。最后一个单元格应该总是最后一个。

我使用了以下两个代码,但都失败了。

func tableView (_ tableView: UITableView, targetIndexPathForMoveFromRowAt sourceIndexPath: IndexPath, toProposedIndexPath proposedDestinationIndexPath: IndexPath) -> IndexPath {
        if proposedDestinationIndexPath.row == myTableviewArray.count - 1 {
            return IndexPath (row: myTableviewArray.count - 1, section: 0)
        }
        return proposedDestinationIndexPath
    }

func tableView (_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
        if destinationIndexPath.row! = myTableviewArray.count {
            let movedObject = myTableviewArray [sourceIndexPath.row]
            myTableviewArray.remove (at: sourceIndexPath.row)
            menuDic.insert (movedObject, at: destinationIndexPath.row)
        }
    }

使用这两个代码,单元仍将在最后一个单元下方移动。堆栈溢出。一直谢谢你! :)

1 个答案:

答案 0 :(得分:2)

indexPath.row从零开始。如果myTableviewArray是您的数据源。

indexPath.row <myTableviewArray.count,这将永远是正确的。

尝试使用:

func tableView (_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        if indexPath.row < myTableviewArray.count - 1 {
            return true
        }
        return false
    }