[英]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
函数中,并且所有单元格都具有与其名称相对应的优先级(“测试”除外),而且这些图片是慢动作拍摄的,这意味着用户将无法实际看到切换发生了。
只需根据这些优先级对项目数组进行排序,然后重新加载表即可。
这样,索引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.