Перетаскивание - принимаются только папки

Я пишу настраиваемое представление, которое должно принимать удаление папок. Условие: принимаются только каталоги, поэтому, когда пользователь перетаскивает файл, ничего не должно происходить.

Я зарегистрировал свое представление с:

[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;
}

Где я должен реализовать этот тест, чтобы курсор оставался неизменным, если вместо этого перетаскивать файл?

6
задан Jay 21 February 2014 в 22:06
поделиться