拖放不适用于NSTableView

0 cocoa objective-c nsdragginginfo

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

- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender
Run Code Online (Sandbox Code Playgroud)

方法没有被调用.

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

即使我实施这个也...

- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender
Run Code Online (Sandbox Code Playgroud)

NSG*_*God 5

我们需要更多信息.

"...但是当我们将图像拖入NSTableView时"

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

这是你自己的自定义子类NSTableView吗?因为那是你将会看到-performDragOperation:或被-prepareForDragOperation:召唤的唯一地方.默认情况下,NSTableView将覆盖这些原始NSDraggingDestination方法,比如Bavarious提到的(执行自己面向的tableview型的方法-tableView:validateDrop:proposedRow:proposedDropOperation:,-tableView:acceptDrop:row:dropOperation:等等).如果您正在讨论这些方法未在NSTableView子类中调用的事实,那么请记住文档为-prepareForDragOperation指出的内容:

仅当最新的draggingEntered:或draggingUpdated:消息返回可接受的拖动操作值时,才会调用此方法

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

另一方面,如果你不是在谈论一个NSTableView子类,而是一个外部控制器类,那么,是的,那些performDragOperation:prepareForDragOperation:没有被它调用.换句话说,如果你有一个控制器类,比如说MDAppController,它的设置是一个委托和数据源NSTableView,将-performDragOperation:prepareForDragOperation:MDAppController不会被调用.这些方法适用于NSView基于类的方法.因此,NSTableViewNSTableViewDataSource协议中定义了以下方法:tableView:validateDrop:proposedRow:proposedDropOperation:.如果在控制器类中实现它,则应该调用它,前提是您已正确设置tableView并且已针对所需的数据类型进行了注册.