重新排序表格单元格

问题描述:

我试图根据它们的优先级(枚举)重新排序单元格。我有双重检查,我的枚举值是正确的。这是我的枚举重新排序表格单元格

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函数中,除了“test”之外,所有单元格的优先级都与它们的名称相对应,并且这些图片是以慢动作拍摄的,这意味着用户将无法真正实现看到开关发生。

中秋节SEGUE Cells start switching

细胞完成切换 Cells finish switching

+0

所以你要设置动画的运动?否则,在对数组进行排序后reloadData将会为你工作。 – adev

只是有点你根据这些重点项目的数组,然后做一个表重装。

通过这种方式,索引0只是第一个项目等,您将获得简单的代码,不会因为即时排序/比较而变得混乱。

排序看起来是这样的(你做出enumInt型之后,并更名为priorityValuepriority我建议你做):

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

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

我会如何按照正确的顺序排列我的数组? – williej926

您更好地设定优先级值明确这样。

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()