【问题标题】:Always sort NSTableView总是排序 NSTableView
【发布时间】:2016-10-22 02:30:04
【问题描述】:

如何始终对 NSTableView 中的列进行排序? 当我的视图被加载时,数据没有被排序,当数据被更新时也是如此。现在只有当我点击标题列时,数据才会排序。

这是我点击标题列时对数据进行排序的代码:

在 ViewDidLoad 中:

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

委托函数:

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 Array 中的数据进行排序。这是代码:

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

【问题讨论】:

    标签: swift macos cocoa nstableview


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,没想到!
    猜你喜欢
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多