繁体   English   中英

重新排序tableview单元格

[英]Reordering tableview cells

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

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函数中,并且所有单元格都具有与其名称相对应的优先级(“测试”除外),而且这些图片是慢动作拍摄的,这意味着用户将无法实际看到切换发生了。

中秋节SEGUE 电池开始切换

电池完成切换 电池完成切换

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

这样,索引0只是第一项,以此类推,并且您将获得简单的代码,这些代码不会在即时进行排序/比较时造成混淆。

排序看起来像(在将enum类型设置为Int并将重命名priorityValue priority重命名为priorityValue priority ,我建议您这样做):

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

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

您最好像这样明确设置优先级值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM