我正在編寫需要接受文件夾丟棄的自定義視圖。條件是:只接受目錄,所以當用戶拖拽文件時不會發生任何事情。拖放 - 僅接受文件夾
我登記我的看法有:
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
的基本拖動協議的方法都已經實現了。出於測試目的:
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
NSLog("@Drag Entered");
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
return NSDragOperationCopy;
}
- (void)draggingExited:(id<NSDraggingInfo>)sender
{
NSLog(@"Dragging Exited");
}
- (BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender { return YES; }
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { return YES; }
因此,它的工作原理幾乎是正確的:當拖動視圖時,光標變爲加號。不過,如果該項目是普通文件,我想避免這種情況。
我可能需要使用NSFileManager來做到這一點(雖然我不知道是否有更簡單的方法),一旦我得到拖動的路徑,但問題是在哪裏。我試圖在draggingEntered:
方法中包含測試權限,但返回NSDragOperationNone沒有成功。我從蘋果文檔下面的代碼段:
{
NSPasteboard *pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType]) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
int numberOfFiles = [files count];
// Perform operation using the list of files
}
return YES;
}
我應該在哪裏實施這個測試,所以如果一個文件被拖到不是光標保持不變?
呵呵,正如我在文中所說的,我已經在'draggingEntered:'中實現了測試,但是通過'draggingUpdated:'錯過了這一點。剛剛刪除它。非常感謝! – sidyll 2011-06-02 13:45:03
理想情況下,在一個單獨的方法中實施一次測試,並從'draggingEntered:'和'draggingUpdated:'發送自己的消息。 – 2011-06-04 02:39:56