2016-10-22 3 views
0

어떻게 NSTableView에서 열을 정렬 할 수 있습니까? 내보기가로드 될 때 데이터가 정렬되지 않으며 데이터가 업데이트 될 때도 정렬됩니다. 지금은 헤더 열을 클릭 할 때만 데이터가 정렬됩니다. 있는 viewDidLoad에서항상 정렬 NSTableView

: 헤더 열을 클릭하면 다음

는 데이터를 정렬 내 코드입니다

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를로드하기 전에 데이터 배열의 데이터를 정렬해야했습니다. 코드는 다음과 같습니다.

답변

1

데이터 원본의 요소 순서에 따라 테이블보기에서 요소의 순서가 결정됩니다. 따라서 데이터 소스 (기술적으로 위임자가 아님)에서 정렬 설명자가 변경되었다는 메시지가 표시되면 데이터 소스에서 관리하는 데이터의 순서를 변경해야합니다.

질문에 대한 대답은 데이터 소스의 데이터를 처음부터 원하는 순서로 유지하는 것입니다. tableView(_:sortDescriptorsDidChange:)에서 정렬하지 마십시오. 시작부터 정렬하십시오.

물론 데이터를 동적으로 추가하는 경우 정렬 순서를 유지해야합니다. index(of:inSortedRange:options:usingComparator:)을 사용하여 정렬 순서를 유지하기 위해 새 요소를 삽입 할 위치를 찾을 수 있습니다. 또는 원하는 위치에 데이터를 추가 한 다음 다시 정렬 할 수 있습니다.

+0

감사합니다. 나는 그것에 대해 생각하지 않았습니다! – user3722523