拖放不适用于NSTableView

时间:2011-05-19 08:20:31

标签: objective-c cocoa nsdragginginfo

我已在我的应用程序中实现了拖放功能。所有功能都很好,但是当我们将图片拖到NSTableView时,

- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender

方法没有被调用。

任何人都可以告诉我为什么不调用此方法的原因?

即使我也实施了这个......

- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender

1 个答案:

答案 0 :(得分:5)

我们需要更多信息。

  

“...但是当我们将图片拖入NSTableView时”

你是什么意思“图像”,你在哪里(什么应用程序)拖动这个图像?例如,您是指从您正在拖动到应用程序中的表视图的Finder中的图像文件(Picture.png)吗?或者从您自己的应用程序中将一些图像从一个位置拖动到表格视图?

这是您自己的NSTableView自定义子类吗?因为这是您将看到-performDragOperation:-prepareForDragOperation:被调用的唯一地方。默认情况下,NSTableView会覆盖那些原始的NSDraggingDestination方法,以实现自己的面向表视图的方法类型,如Bavarious提到的(-tableView:validateDrop:proposedRow:proposedDropOperation:-tableView:acceptDrop:row:dropOperation:等)。如果你在谈论这些方法没有在NSTableView子类中调用的事实,那么请记住文档对-prepareForDragOperation:所说的内容:

  

仅当调用此方法时才会调用此方法   最近拖动进入:或   draggingUpdated:消息返回了一个   可接受的拖动操作值

首先,您需要确保已注册所需的拖动类型,然后需要实施-draggingEntered

另一方面,如果您不是在讨论NSTableView子类,而是外部控制器类,那么,是的,那些performDragOperation:prepareForDragOperation:不会被调用为了它。换句话说,如果你有一个控制器类,比如MDAppController,它被设置为NSTableView-performDragOperation:prepareForDragOperation: MDAppController的委托和数据源。 1}}不会被调用。这些方法适用于基于NSView的类。因此,NSTableViewNSTableViewDataSource协议中定义了以下方法:tableView:validateDrop:proposedRow:proposedDropOperation:。如果你在你的控制器类中实现它,那么应该调用它,只要你正确设置tableView并且已经注册了你想要的数据类型。