gpt4 book ai didi

swift - 始终对 NSTableView 进行排序

转载 作者:行者123 更新时间:2023-11-28 16:06:41 26 4
gpt4 key购买 nike

如何始终对 NSTableView 中的列进行排序?当我的 View 加载时,数据未排序,数据更新时也是如此。目前只有当我点击标题列时,数据才会排序。

这是我在单击标题栏时对数据进行排序的代码:

在 ViewDidLoad 中:

let descriptorName = NSSortDescriptor(key: "designation", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
tableview.tableColumns[0].sortDescriptorPrototype = descriptorName

委托(delegate)函数:

func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
let dataArrayMutable = NSMutableArray(array: self.data)
dataArrayMutable.sort(using: tableView.sortDescriptors)
self.data = (dataArrayMutable as NSArray) as! [Article]
tableview.reloadData()
}

问题已解决:在加载 tableView 之前,我必须对数据数组中的数据进行排序。这是代码:

data = data.sorted(by: { $0.designation! < $1.designation! })

最佳答案

数据源中元素的顺序决定了 TableView 中元素的顺序。这就是为什么当您的数据源(技术上不是您的委托(delegate))被告知排序描述符已更改时,您所做的就是更改数据源管理的数据的顺序。

因此,您的问题的答案只是让数据源的数据从一开始就保持所需的顺序。不要只是在 tableView(_:sortDescriptorsDidChange:) 中对其进行排序。从头开始排序。

当然,如果动态添加数据,则需要维护排序顺序。您可以使用 index(of:inSortedRange:options:usingComparator:)找到插入新元素的位置以维护排序顺序。或者,您可以在任何地方添加数据,然后重新排序。

关于swift - 始终对 NSTableView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40187747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com