2016-10-22 6 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() 
} 

問題はを解く:I tableViewをロードする前にデータ配列内のデータをソートしなければなりませんでした。コードは次のとおりです。

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

答えて

1

データソース内の要素の順序は、テーブルビュー内の要素の順序を決定します。そのため、データソース(技術的には代理人ではない)がソートデスクリプタが変更されたことが伝えられると、データソースが管理するデータの順序を変更する必要があります。

質問の答えは、最初からデータソースのデータを希望の順序に保つことです。 tableView(_:sortDescriptorsDidChange:)でソートしないでください。最初からソートしてください。

もちろん、データを動的に追加する場合は、ソート順を維持する必要があります。 index(of:inSortedRange:options:usingComparator:)を使用すると、新しい要素を挿入してソート順を維持する場所を見つけることができます。または、データをどこにでも追加してから、再び並べ替えることができます。

+0

ありがとう、私はそれについて考えなかった! – user3722523

関連する問題