Custom NSView Drag Destination

Я пытаюсь создать простой NSView, который позволит перетаскивать на него папку из Finder. Путь к папке - это только вещь, которую я хочу, чтобы вид принимался как перетаскиваемый элемент. Я пытался следовать документации Apple, но пока ничего не работает. До сих пор я просто пытался заставить вид работать с любым типом файлов, но, кажется, я даже не могу этого сделать. Вот что у меня пока что есть:

-(id) initWithFrame:(NSRect)frameRect
{
    if (self = [super initWithFrame:frameRect])
    {
        NSLog(@"getting called");
        [self registerForDraggedTypes:[NSArray arrayWithObjects:NSPasteboardTypeString,
                                       NSPasteboardTypePDF,
                                       NSPasteboardTypeTIFF,
                                       NSPasteboardTypePNG,
                                       NSPasteboardTypeRTF,
                                       NSPasteboardTypeRTFD,
                                       NSPasteboardTypeHTML,
                                       NSPasteboardTypeTabularText,
                                       NSPasteboardTypeFont,
                                       NSPasteboardTypeRuler,
                                       NSPasteboardTypeColor,
                                       NSPasteboardTypeSound,
                                       NSPasteboardTypeMultipleTextSelection,
                                       NSPasteboardTypeFindPanelSearchOptions, nil]];
    }
    return self;
}

-(BOOL) prepareForDragOperation: (id) sender
{
    NSLog(@"preparing for drag");

    return YES;
}

вызывается метод initWithFrame:, но когда я пытаюсь перетащить в вид, метод prepareForDragOperation:, кажется, никогда не вызывается. Мои вопросы:

  1. Что я делаю не так? Почему никогда не вызывается prepareForDragOperation:?
  2. Что мне нужно сделать, чтобы операция перетаскивания поддерживала только папки для перетаскивания?

Обновление

Я обновил свой метод registerForDragTypes: с каждым типом, который я смог найти. Теперь все выглядит так:

[self registerForDraggedTypes:[NSArray arrayWithObjects:NSPasteboardTypeString,
                               NSPasteboardTypePDF,
                               NSPasteboardTypeTIFF,
                               NSPasteboardTypePNG,
                               NSPasteboardTypeRTF,
                               NSPasteboardTypeRTFD,
                               NSPasteboardTypeHTML,
                               NSPasteboardTypeTabularText,
                               NSPasteboardTypeFont,
                               NSPasteboardTypeRuler,
                               NSPasteboardTypeColor,
                               NSPasteboardTypeSound,
                               NSPasteboardTypeMultipleTextSelection,
                               NSPasteboardTypeFindPanelSearchOptions,
                               NSStringPboardType,
                               NSFilenamesPboardType,
                               NSPostScriptPboardType,
                               NSTIFFPboardType,
                               NSRTFPboardType,
                               NSTabularTextPboardType,
                               NSFontPboardType,
                               NSRulerPboardType,
                               NSFileContentsPboardType,
                               NSColorPboardType,
                               NSRTFDPboardType,
                               NSHTMLPboardType,
                               NSURLPboardType,
                               NSPDFPboardType,
                               NSVCardPboardType,
                               NSFilesPromisePboardType,
                               NSMultipleTextSelectionPboardType, nil]];

Я заметил, что метод prepareForDragOperation: не вызывается, когда я перетаскиваю папку в вид. Я пропустил шаг?

11
задан LandonSchropp 13 September 2011 в 20:33
поделиться