【问题标题】:Reordering tableview cells重新排序表格视图单元格
【发布时间】:2017-07-27 21:17:16
【问题描述】:

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

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”,而且这些图片是以慢动作拍摄的,这意味着用户将无法实际看到切换发生。

中段

单元格完成切换

【问题讨论】:

  • 那么你想要动画它的移动吗?否则排序数组后调用 reloadData 对你有用。

标签: ios swift uitableview enums


【解决方案1】:

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

这样,索引0 只是第一项等,您将获得简单的代码,不会因在整个地方进行动态排序/比较而造成混淆。

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

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

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

【讨论】:

  • 如何按正确的顺序对数组进行排序?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多