重新排序tableview单元格

时间:2017-07-27 21:17:17

标签: ios swift uitableview enums

我试图根据优先级(枚举)重新排序单元格。我仔细检查过我的枚举值是否正确。这是我的枚举

enum Priority{
    case low
    case neutral
    case high
    case urgent
}

如您所见,优先级较低的哈希值较低。我想比较两个细胞;一个细胞和它上面的细胞。如果单元格的值大于其上方的值,它将向上移动。我使用

获取上面单元格的IndexPath
var newIndexPath = IndexPath(row: indexPath.row - 1 , section: indexPath.section)

使用

比较枚举值
if(comparePriority.hashValue < priorityValue.hashValue)

我尝试使用

切换订单
tableview.moveRow(at: indexPath, to: newIndexPath)

结果很有意思,我会用图片来解释。请注意,所有这些代码都在我的cellForRowAt函数中,除了&#34; test&#34;之外,所有单元格都被赋予与其名称相对应的优先级,这些图片也是以慢动作拍摄的,这意味着用户无法真正看到切换发生。

中期SEGUE Cells start switching

单元格完成切换 Cells finish switching

2 个答案:

答案 0 :(得分:2)

根据这些优先级对项目数组进行排序,然后重新加载表格。

通过这种方式,索引0只是第一个项目等等,您将获得简单的代码,这些代码不会在整个地方进行分类/比较。

排序看起来像(在您enum类型为Int并将priorityValue重命名为priority后,我建议您这样做:< / p>

enum Priority: Int
{
    case low     = 0
    case neutral = 1
    case high    = 2
    case urgent  = 3
}

items.sorted(by: { $0.priority < $1.priority })

答案 1 :(得分:0)

您最好明确地设置优先级值。

enum Priority: Int {
case low = 0
case neutral = 1
case high = 2
case urgent = 3
}

并将您的dataSource数组排序为

dataSource = dataSource.sorted(by: { $0.priority < $1.priority })
tableView.reloadDate()