0
我可以使用Interface Builder成功將NSTreeController綁定到NSOutlineView。當我嘗試以編程方式做同樣的事情時,除了一個小問題外,我還可以使其工作。綁定到NSTreeController的NSOutlineView(節點在窗口大小調整時崩潰)
調整大綱視圖所固定到的窗口的大小會摺疊所有未清項目。如果我以其他方式調整大綱視圖的大小,比如將其放置在NSSplitView中,則上下移動滑塊不會導致任何問題。它只發生在我調整窗口大小時。
大綱視圖只是Interface Builder中的默認設置。我把它放在一個窗口上,固定住所有四面,將插座連接到我的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
}