フォルダーのドロップを受け入れる必要があるカスタム ビューを作成しています。条件は、ディレクトリのみが受け入れられるため、ユーザーがファイルをドラッグしても何も起こらないことです。
ビューを次のように登録しました。
[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 でそれを行う必要がありますが (もっと簡単な方法があるのではないかと思います)、問題はどこにあるかです。NSDragOperationNonedraggingEntered:
を返すメソッドにテストを含めようとしましたが、成功しませんでした。私はAppleのドキュメントのスニペットに従っています:
{
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;
}
このテストをどこに実装すればよいのでしょうか?ファイルがドラッグされてもカーソルは同じままになりますか?