Я пишу пользовательский вид, который должен принимать отбрасывания папок. Условие таково: принимаются только каталоги, поэтому, когда пользователь перетаскивает файл, ничего не должно происходить.
Я зарегистрировал свой взгляд на:
[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 , но безуспешно. Я следую отрывку из документации 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;
}
Где я должен реализовать этот тест, чтобы курсор оставался прежним, если вместо этого файл перетаскивается?