NSTableView Cheatsheet
NSTableView 에 대해 개인적으로 겪거나 필요한 내용을 정리했다. 이 글은 지속적으로 업데이트 될 수도 있다.
컬럼 헤더(Column Header)를 숨기고 싶다면 인터페이스 빌더에서 테이블뷰(NSTableView)를 선택 한 후 속성에서 Headers 의 체크를 해제하면 된다.
아무래도 인터페이스 빌더의 버그라고 생각된다.
Cell Based:
특정 열(Row)을 더블클릭 하는 경우는 어떻게 인식할까. 인터페이스 빌더에서 doubleAction 에 대한 액션 핸들러를 만들면 된다.
Hide Column Header
컬럼 헤더(Column Header)를 숨기고 싶다면 인터페이스 빌더에서 테이블뷰(NSTableView)를 선택 한 후 속성에서 Headers 의 체크를 해제하면 된다.
Column Size Problem
컬럼을 삭제하거나 기타 이유로 싱글 컬럼을 만들었을 때 셀의 넓이(width)가 작게 고정되어서 테이블이 늘어나도 이에 맞게 늘어나지 않는 현상이 생길 때가 있다. 이럴 때는 테이블 전체의 크기를 셀 크기보다 작게 줄였다가 다시 원래 크기로 늘리면 해결될 수도 있다.아무래도 인터페이스 빌더의 버그라고 생각된다.
Data Source and Delegate
컨트롤러 없이 코드로 테이블의 내용을 채울 때 필요한 최소한의 데이터소스와 딜리게이트 예제소스이다. 셀 기반과 뷰 기반이 약간 다르다.Cell Based:
func numberOfRowsInTableView(_ tableView: NSTableView) -> Int { return self.someItems.count } func tableView(_ tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row row: Int) -> AnyObject? { if tableColumn!.identifier == "some-column-identifier" { return "column value for row \(row)" } ... }View Based:
func numberOfRowsInTableView(tableView: NSTableView) -> Int { return self.someItems.count } func tableView(_ tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row row: Int) -> NSView? { if tableColumn!.identifier == "some-column-id" { let cell = tableView.makeViewWithIdentifier("some-cell-id", owner: nil) as! NSTableCellView cell.textField!.stringValue = "some label text" return cell } ... }
Select Row Programatically
특정 열(Row) 선택하기tableView.selectRowIndexes(NSIndexSet(index: row), byExtendingSelection: false)
Handle Double Click
특정 열(Row)을 더블클릭 하는 경우는 어떻게 인식할까. 인터페이스 빌더에서 doubleAction 에 대한 액션 핸들러를 만들면 된다.
Disable Selection
셀이나 열 선택을 막기 위해서는 NSTableViewDelegate 의 아래 녀석을 아래처럼 빈 인덱스 셋을 돌려주는 방식으로 구현해 주면 된다.func tableView(tableView: NSTableView, selectionIndexesForProposedSelection proposedSelectionIndexes: NSIndexSet) -> NSIndexSet { return NSIndexSet() }
댓글