我正在尝试为我的NstableView设置非常基本的拖放。表视图具有单列(带有自定义单元格)。该列绑定到NSARRAYCONTROLLER,并且数组控制器的内容数组绑定到我的控制器对象上的NSArray。数据显示在表格中。我连接了 dataSourcedelegate 表的插座查看我的控制器对象,然后实现以下方法:

- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
    NSLog(@"dragging");
    return YES;
}

- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op
{
    return NSDragOperationEvery;
}

- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
              row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
    return YES;
}

我还注册了阻力类型 -awakeFromNib:

#define MyDragType @"MyDragType"

- (void)awakeFromNib
{
    [super awakeFromNib];
    [_myTable registerForDraggedTypes:[NSArray arrayWithObjects:MyDragType, nil]];
}

问题是-tableview:WriterowSwithIndexes:tupasteboard:方法是 从未打电话. 。我看了很多例子,我不知道我做错了什么。问题是我正在使用自定义单元格吗?我应该在单元子类中覆盖某些东西以启用此功能吗?

编辑:已确认。为常规的Nstextfieldcell切换自定义单元,使拖动工作。现在, 我如何通过自定义单元进行拖放工作?

有帮助吗?

解决方案 2

我解决了问题。在表视图中使用自定义NSCELL的绑定似乎存在问题。切换到传统 NSTableViewDataSource 方法而不是绑定和阵列控制器解决了它。

其他提示

我正撞到墙上,寻找一个更优雅的解决方案,以解决同一问题,然后遇到了这个问题:

http://www.wooji-juice.com/blog/cocoa-10-bindings.html

例如,如果您想支持表格上的拖放,则需要为其设置数据源 - 即使您使用绑定来提供实际数据,也可以在其上设置数据源,可可需要一个来处理 tableView:writeRowsWithIndexes:toPasteboard 和相关消息。

是的。如果您将所有内容都绑定到数组控制器,那么您可以做的是使数组控制器实现必要的拖放功能,然后将表视图的数据源设置为带有数组的数据源 setDataSource:.

对我有用的是在我的自定义单元的初始化器中调用InittextCell而不是Init或Initimagecell(就我而言,INIT)。超级类是NSCELL还是NSACTIONCELL似乎并不重要。另外,我具有装订,拖动仍然有效。

这应该足以允许拖动开始。你是 当然 您已经连接了委托方法吗?

我遇到了这个问题,您的自定义单元需要扩展 NSActionCell 不是 NSCell 如果您想拖放以正常工作。您可能可以在 NSCell 这也可以使一切都起作用,但是我在切换后没有进一步挖掘 NSActionCell. 。至少,这解决了我的问题。

我遇到了这个问题。我有一个NSCELL子类,我确实实现了 tableView:writeRowsWithIndexes:toPasteboard 并为NstableView设置了数据源。拖动将行不通。

如果我在我的初始化中设置单元格类型

    self.type = NSTextCellType;

然后我被拖动。如果我不这样做,则默认为 NSNullCellType 拖动行不通。我猜想那些使用另一个子类工作的人 NSTextFieldCell 工作是因为单元格类型不同。

我还观察到类似的问题,NstableView Drag&Drop无法正常工作。我的表观视图中有4列,其中两个是自定义单元格。即使在细胞分离器上起作用,拖动非定量单元也可以正常工作,但是它不适用于自定义单元。

我的自定义单元格是从NSButtoncell的,这引起了该问题。因此,正如建议的那样,我将父班从nsbuttoncell更改为nsactioncell。现在,拖动正常工作。

它可以与Nscell和NsactionCell一起使用,但是我需要在我的单元上进行操作,因此使用NsactionCell。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top