您的当前位置:首页正文

Mac Dev Part 4 - NSOutlineView -

来源:花图问答

自己选择的路,怎么都得走下去

swift不熟悉,用的是另外一种思路,所以遇到问题有点束手无策

1.剪切板相关

// MARK: - Pasteboad
extension ViewController {

    // 获取到拖动项文字到剪切板
    func outlineView(_ outlineView: NSOutlineView, pasteboardWriterForItem item: Any) -> NSPasteboardWriting? {
        let pbItem = NSPasteboardItem()
        if item is LeafModel {
            let model = item as! LeafModel
            pbItem.setString(model.leafName, forType: NSPasteboard.PasteboardType.string)
            return pbItem
        }
        return nil
    }
    
    func outlineView(_ outlineView: NSOutlineView, validateDrop info: NSDraggingInfo, proposedItem item: Any?, proposedChildIndex index: Int) -> NSDragOperation {
        // 不能拽到根层外面
        let canDrag = index >= 0 && item != nil
        
        if canDrag {
            return .move
        } else {
            // 以前是.none
            return []
        }
    }
    
    // 处理拖动逻辑(想了一晚上加一上午,没有找到比较好的办法,以后会补上)
    func outlineView(_ outlineView: NSOutlineView, acceptDrop info: NSDraggingInfo, item: Any?, childIndex index: Int) -> Bool {
        let pastboard = info.draggingPasteboard
        let name = pastboard.string(forType: NSPasteboard.PasteboardType.string)
        
        return true
    }
}

2.Undo Manager

acceptDrop中添加undoManager可以添加Edit中的Undo(撤销)功能