自己选择的路,怎么都得走下去
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(撤销)功能