2016-10-04 23 views
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 
} 

回答

0

viewWillLayout()是錯誤的地方設置樹控制器和大綱視圖。它被反覆調用,並不意味着這種事情。

將所有內容移動到viewDidLoad()並解決問題。

相關問題