2016-10-22 80 views
0

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

这里是我的代码排序的数据上的标题栏,当点击:

在viewDidLoad中:

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

委托FUNC:

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! }) 

回答

1

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

因此,您的问题的答案只是从一开始就将数据源的数据保持在期望的顺序。不要仅仅在tableView(_:sortDescriptorsDidChange:)中进行分类。从一开始就对它进行排序。

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

+0

谢谢,我没有想到它! – user3722523