2011-05-19 84 views
0

我已经在我的应用程序中实现了拖放功能。所有的功能都很好,但是当我们拖动图像NSTableView拖放不适用于NSTableView

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

方法不获取调用。

任何人都可以告诉我为什么这个方法没有被调用吗?

即使我实现这其中也...

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

回答

5

我们需要更多的信息。

“......但是,当我们拖动图像NSTableView的”

你说的‘形象’的意思,和在哪里(什么应用程序),您在拖动该图像?例如,你的意思是来自Finder的图像文件(Picture.png),你正在拖动到应用程序中的表格视图?或者从你自己的应用程序中拖出一些图像从一个地方到你的表格视图?

这是您自己的自定义子类NSTableView?因为这是您将看到的唯一地方-performDragOperation:-prepareForDragOperation:被调用。默认情况下,NSTableView会覆盖那些原始的NSDraggingDestination方法,以实现其自己的Tableview-oriented类型的方法,如Bavarious提到的(-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并且已经注册了你想要的数据类型。