我已在我的应用程序中实现了拖放功能。所有功能都很好,但是当我们将图片拖到NSTableView
时,
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender
方法没有被调用。
任何人都可以告诉我为什么不调用此方法的原因?
即使我也实施了这个......
- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender
答案 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
的类。因此,NSTableView
在NSTableViewDataSource
协议中定义了以下方法:tableView:validateDrop:proposedRow:proposedDropOperation:
。如果你在你的控制器类中实现它,那么应该调用它,只要你正确设置tableView并且已经注册了你想要的数据类型。