3

想象一下这个人口稀少的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在将识别填充哪些行的核心数据,但我从这里开始)。

  1. 我正在尝试制作一个NSStringPboardType附加到四个NSTextFields可拖动的原型。没有骰子。
  2. 我可以从粘贴板上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东西的新手,所以任何帮助将不胜感激。

4

0 回答 0