2011-05-19 85 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並且已經註冊了你想要的數據類型。