2016-10-22 61 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