2016-10-04 1 views
0

NSTreeControllerをInterface BuilderでNSOutlineViewに正常にバインドできます。プログラムで同じことをしようとすると、ちょっとした問題を除いて動作させることもできます。NSOutlineViewはNSTreeControllerにバインドされています(ノードがウィンドウのサイズを縮小する)

アウトラインビューが固定されているウィンドウのサイズを変更すると、開いているすべてのアイテムが折りたたまれます。アウトラインビューのサイズをNSSplitViewに配置するなど、スライダを上下に動かしても問題はありません。ウィンドウのサイズを変更すると発生します。

アウトラインビューは、Interface Builderのデフォルトビューにすぎません。私は窓にそれを落とし、4面すべてを固定し、コンセントを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()に移動し、問題を解決しました。

関連する問題