2016-10-04 8 views
0

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 
} 

답변

0

viewWillLayout() 설정에 잘못된 장소 트리 컨트롤러와 개요보기입니다 : 여기

내가 프로그래밍 일을 만드는 방법은 다음과 같습니다. 그것은 반복적으로 호출되고 이런 종류의 일을 의미하지 않습니다.

viewDidLoad()로 모든 것을 이동하고 문제를 해결했습니다.