NSOutlineView Cheatsheet
NSOutlineView 에 대해 겪거나 필요한 내용을 정리한다. 이 글은 계속 업데이트 될 수 있다. 기본적인건 NSTableView 와 비슷하니 참고하자.
View Based:
[관련글] NSTableView Cheatsheet
Expand All Children
아웃라인 뷰의 모든 아이템이 펼쳐진 채로 보이길 원한다면 아래 코드를 넣어주자.self.outlineView!.expandItem(nil, expandChildren: true)
Item Padding
각 셀 간 여백(padding 혹은 margin)을 두길 원한다면 intercallSpacing 이라는 걸 이용해 보자.self.outlineView!.intercellSpacing = NSSize(width: 0, height: 16)
DataSource and Delegate
별도의 컨트롤러 없이 코드로 데이터를 채울 경우 필요한 최소한의 코드 예제이다. 아웃라인에선 셀 기반은 잘 안쓰이는 것 같으니 생략한다.View Based:
func outlineView(outlineView: NSOutlineView, isItemExpandable item: AnyObject) -> Bool { return item is SomeItemGroup } func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int { if item == nil { return self.groups.count } else { let group = item as! SomeItemGroup return group.items.count } } func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject { if item == nil { return self.groups[index] } else { let group = item as! SomeItemGroup return group.items[index] } } func outlineView(outlineView: NSOutlineView, viewForTableColumn tableColumn: NSTableColumn?, item: AnyObject) -> NSView? { if item is SomeItemGroup { let group = item as! SomeItemGroup let cell = outlineView.makeViewWithIdentifier("SomeGroupCellID", owner: self) as! NSTableCellView ... return cell } else if item is SomeItem { let item = item as! SomeItem let cell = outlineView.makeViewWithIdentifier("SomeItemCellID", owner: self) as! NSTableCellView ... return cell } ... }
Source List
인터페이스 빌더에서 제공되는 소스리스트는 아웃라인뷰를 이용해 만들어져 있다. 따라서 같다고 생각하자. 소스리스트의 경우 좀 특별한 점은 Header(펼칠 수 있는 아이템)은 HeaderCell 로 아이디가 기본적으로 지정된다는 점이다. 그리고 각 헤더에 들어가는 아이템은 DataCell 이라는 이름이 기본적으로 지정된다.Hide Disclosure Triangle Icon
각 그룹을 묶었다 폈다 하기 위한 작은 삼각형(Disclosure Triangle)을 없애고 싶다면 NSOutlineView 를 상속받아서 아래 메소드를 오버라이드 한다.class NoDisclosureOutlineView: NSOutlineView { override func frameOfOutlineCell(atRow row: Int) -> NSRect { return NSRect.null } }
Remove Indentation
각 그룹의 아이템이 펼쳐지면 기본적으로 왼쪽에 약간의 여백(Indentation)이 있다. 이 여백을 없애려면 NSOutlineView 를 상속받아서 아래 메소드를 오버라이드 한다.class NoIndentationOutlineView: NSOutlineView { override func frameOfCell(atColumn column: Int, row: Int) -> NSRect { let superFrame = super.frameOfCell(atColumn: column, row: row) if column == 0 { return NSRect(x: 0, y: superFrame.origin.y, width: superFrame.size.width, height: superFrame.size.height) } else { return superFrame } } }
[관련글] NSTableView Cheatsheet
댓글