耦合NSDraggingSource w / NSMatrix的问题

时间:2014-08-03 18:51:10

标签: drag-and-drop nspasteboard nsmatrix nsdragginginfo

想象一下这个人口稀少的NSMatrix五列彩色列(0-4),最近添加的列为橙色。这些填充了标有(x,y)坐标的替代对象(随机数)。 "空白"单元格具有替代NULL对象。这有点工作。

enter image description here

我有四个数据"来源"顶部的(A-D)我想要拖拽到矩阵上。它们标有表示目标行(0-3)的数字。 即使我认为我已正确完成NSDragSource,我也无法阻止这些。

示例行为:

如果我将单元格B(带有0,2)拖到"中心"列(4,y)的区域,其内容将与两个空单元(行0和2)合并。如果我拖到列的左侧或右侧区域,我将得到一个前置或附加列 - 在这种情况下,是一个稀疏列。

如果我将单元格A(带有0,1,2,3)拖到任何单元格上,它将创建一个新列。

如果我将单元格D拖到列(0,y)或(4,y)上,它将合并;在其他地方拖动它将创建新的稀疏列。使用C在任何地方执行此操作将创建新的稀疏列。

正如人们可以推测的那样,这种复杂的合并行为使我在这里而不是NSTableView

我没有太多问题需要识别左/中/右区域或合并数据或创建新列 - 我需要帮助创建正确的NSPasteboard互动和/或NSDragging设置(我最终希望在Core Data中使用自定义NSManagedObject来识别哪些行已填充,但我从这里开始。)

  1. 我试图将附加到可拖动的四个NSStringPboardType的{​​{1}}原型化。没有骰子。
  2. 我可以从粘贴板中获取NSTextFields接收字符串(或NSMatrix)。没问题。
  3. 一旦我收到相应的传入单元格(字符串),我就可以浏览它并找出是否与当前列合并,或者创建一个新列 - 再次,这不是问题。

    我做过的事情......

    1)Subclassed NSTextField ...

    NSFilenamesPboardType

    2)注册了文本字段'拖动类型和尝试拖动会话......

    @interface CellStringView : NSTextField <NSDraggingSource>
    

    我的- (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:内容感到陌生,所以任何帮助都会受到赞赏。

0 个答案:

没有答案