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