Interface Builder를 사용하여 NSTreeController를 NSOutlineView에 성공적으로 바인딩 할 수 있습니다. 프로그래밍 방식으로 동일한 작업을 수행하려고 할 때도 약간의 문제 만 제외하고 작동하도록 할 수 있습니다.NSOutlineView가 NSTreeController에 바인딩 됨 (노드 크기 축소시 노드 축소)
개요보기가 고정 된 창 크기를 조정하면 열려있는 모든 항목이 축소됩니다. 윤곽선보기의 크기를 NSSplitView에 배치하는 것과 같이 다른 방법으로 조정하면 슬라이더를 위아래로 움직여도 문제가 발생하지 않습니다. 창 크기를 조정할 때만 발생합니다.
개요보기는 인터페이스 작성기의 기본보기입니다. 나는 그것을 창문에 떨어 뜨려 네면을 모두 고정시키고 콘센트를 ViewController에 연결했다.
누구나 통찰력을 갖고 있습니까? 감사.
override func viewWillLayout() {
super.viewWillLayout()
var treeController: NSTreeController!
@IBOutlet weak var outlineView: NSOutlineView!
var content = [TreeNode]()
newTreeController = NSTreeController.init(content: nil)
newTreeController.objectClass = TreeNode.self
newTreeController.childrenKeyPath = "children"
newTreeController.countKeyPath = "count"
newTreeController.leafKeyPath = "leaf"
newTreeController.preservesSelection = true
newTreeController.isEditable = true
newTreeController.bind("contentArray", to: self, withKeyPath: "content", options: nil)
outlineView.delegate = self
outlineView.bind("content", to: newTreeController, withKeyPath: "arrangedObjects", options: nil)
outlineView.bind("selectionIndexPaths", to: newTreeController, withKeyPath: "selectionIndexPaths", options: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
willChangeValue(forKey: "content")
// POPULATE CONTENT ARRAY
didChangeValue(forKey: "content")
}
// NSOutlineViewExtension
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
var cellView: NSTableCellView?
if let identifier = tableColumn?.identifier {
if let view = outlineView.make(withIdentifier: identifier, owner: outlineView.delegate) as? NSTableCellView {
// view.imageView?.bind(NSValueBinding, to: view, withKeyPath: "objectValue.WHATEVER_PROPERTY", options: nil)
// view.textField?.bind(NSValueBinding, to: view, withKeyPath: "objectValue.WHATEVER_PROPERTY", options: nil)
cellView = view
}
}
return cellView
}