想象一下这个人口稀少的NSMatrix
五个彩色列 (0-4),最近添加的列是橙色的。这些填充有带有 (x,y) 坐标的替代对象(随机数)。“空白”单元格具有替代的 NULL 对象。这有点工作。
我在顶部有四个数据“源”(AD),我想将它们拖到矩阵上。它们标有代表目标行 (0-3) 的数字。 即使我认为我做得对,我也无法让这些拖动NSDragSource
。
示例行为:
如果我将单元格 B(带有 0,2)拖到列(4,y)的“中心”区域,它的内容将与两个空单元格(第 0 行和第 2 行)合并。如果我拖到列的左侧或右侧区域,我将得到一个前置或附加列——在这种情况下,是一个稀疏列。
如果我将单元格 A(带有 0,1,2,3)拖到任何单元格上,它将创建一个新列。
如果我将单元格 D 拖到 (0,y) 或 (4,y) 列上,它将合并;将其拖动到其他任何地方将创建新的稀疏列。在任何地方使用 C 执行此操作将创建一个新的稀疏列。
可以推测,这种复杂的合并行为将我带到了这里,而不是说,NSTableView
.
我没有太多识别左/中/右区域或合并数据或创建新列的问题——我需要帮助创建正确的NSPasteboard
交互和/或NSDragging
设置:( 我最终想NSManagedObject
在将识别填充哪些行的核心数据,但我从这里开始)。
- 我正在尝试制作一个
NSStringPboardType
附加到四个NSTextFields
可拖动的原型。没有骰子。 - 我可以从粘贴板上
NSMatrix
接收字符串(或)。NSFilenamesPboardType
那里没问题。
一旦我收到适当的传入单元格(字符串),我就可以浏览它并确定是与当前列合并还是创建一个新列——同样,这不是问题。
我做过的事情...
1) 子类化 NSTextField...
@interface CellStringView : NSTextField <NSDraggingSource>
2)注册文本字段的拖动类型并尝试拖动会话...
- (void)awakeFromNib {
[self registerForDraggedTypes:@[NSStringPboardType]];
}
- (NSDragOperation)draggingSession:(NSDraggingSession *)session
sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
if (context == NSDraggingContextWithinApplication) {
return NSDragOperationCopy;
}
else
return NSDragOperationNone;
}
-(void)dealloc {
[self unregisterDraggedTypes];
}
我的draggingSession:sourceOperationMaskForDraggingContext:
方法甚至从未被调用过。
我是这个NSPasteboard
东西的新手,所以任何帮助将不胜感激。