基于优先级自动排列Tableview中的行 - Swift 3/4

时间:2017-11-07 20:50:13

标签: swift uitableview sorting swift3 rows

在我的待办事项列表应用中,用户可以在添加任务时选择优先级。此优先级设置每个单元格中图像视图的颜色,如下所示:

cell.priorityImageView.image = UIImage(named: String(tasks[indexPath.row].priority))

设置优先级时,优先级(int)为0,1,2,3

我想自动对行进行排序,以便所有3个位于顶部,所有2个位于等等

这一切都可能吗?如果是的话,怎么样?

我有一个任务数组

var tasks = [Task]()

当添加任务时,它通过核心数据

完成
 func AddTaskToCoreData() {
    //Access Name - Make sure to check presence
    let task = taskTextView.text!
    let taskPriority = Int16(priorityNumber)
    var date = "12:00"
    if selectedDate == true {
        let datepick = datePicker.date
        let formatter = DateFormatter()
        formatter.dateFormat = "MMM d HH:mm"
        let result = formatter.string(from: datepick)
        date = result
    } else {
        date = ""
    }

    if taskTextView.text != "" {
        let mainTask = Task(context: PersistenceService.context)
        mainTask.task = task
        mainTask.priority = taskPriority
        mainTask.notification = date
        print(selectedDate)
        PersistenceService.saveContext()
        self.tasks.append(mainTask)
        self.tableView.reloadData()
        taskTextView.text = ""
        refreshTaskAmount()
    }
}

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

最好是提供更多代码。

如果你的tableview从一个Task对象数组中获取数据,其中Task对象具有priority属性,你应该在优先级更新后对数组进行排序并重新加载tableview(或者您可以插入正确的位置,这样您就不必每次都进行排序,但如果您的列表不是很大,则节省的时间可以忽略不计):

self.tasks = self.tasks.sorted(by: {$0.priority > $1.priority})

这使得具有较高优先级的任务的任务排序在具有较低优先级的任务之前。然后拨打tableview.reloadData()