Objective c 拖放不适用于NSTableView

Objective c 拖放不适用于NSTableView,objective-c,cocoa,nsdragginginfo,Objective C,Cocoa,Nsdragginginfo,我已经在我的应用程序中实现了拖放功能。所有功能都很好,但当我们将图像拖到NSTableView中时 - (BOOL)performDragOperation:(id < NSDraggingInfo >)sender -(BOOL)执行跟踪操作:(id)发送方 方法未被调用 有谁能告诉我这个方法没有被调用的原因吗 即使我也实现了这一点 - (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender -(BO

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

- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender
-(BOOL)执行跟踪操作:(id)发送方
方法未被调用

有谁能告诉我这个方法没有被调用的原因吗

即使我也实现了这一点

- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender
-(BOOL)preparefordragooperation:(id)发送方

我们需要更多的信息

“…但当我们将图像拖动到NSTableView中时”

您所说的“图像”是什么意思?您从何处(哪个应用程序)拖动此图像?例如,您是指正在应用程序中将查找器中的图像文件(Picture.png)拖动到表视图中吗?还是从您自己的应用程序将某个图像从一个位置拖动到表视图

这是您自己的
NSTableView
的自定义子类吗?因为这是您将看到调用的唯一位置
-performDragOperation:
-prepareForDragOperation:
。默认情况下,
NSTableView
覆盖那些原始的NSDraggingDestination方法,以实现其自己的面向tableview的方法类型,如前面提到的各种方法(
-tableview:validateDrop:proposedRow:proposedDropOperation:
-tableview:acceptDrop:row:dropOperation:
等)。如果您谈论的是在
NSTableView
子类中没有调用这些方法的事实,那么请记住文档中的说明:

仅当 最近一次拖动:或 DragginUpdated:消息返回了一个 可接受的拖动操作值

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


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

我们需要更多信息

“…但当我们将图像拖动到NSTableView中时”

您所说的“图像”是什么意思?您从何处(哪个应用程序)拖动此图像?例如,您是指正在应用程序中将查找器中的图像文件(Picture.png)拖动到表视图中吗?还是从您自己的应用程序将某个图像从一个位置拖动到表视图

这是您自己的
NSTableView
的自定义子类吗?因为这是您将看到调用的唯一位置
-performDragOperation:
-prepareForDragOperation:
。默认情况下,
NSTableView
覆盖那些原始的NSDraggingDestination方法,以实现其自己的面向tableview的方法类型,如前面提到的各种方法(
-tableview:validateDrop:proposedRow:proposedDropOperation:
-tableview:acceptDrop:row:dropOperation:
等)。如果您谈论的是在
NSTableView
子类中没有调用这些方法的事实,那么请记住文档中的说明:

仅当 最近一次拖动:或 DragginUpdated:消息返回了一个 可接受的拖动操作值

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

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