Re[2]: Drag & Drop, cocoa, destination
От: amusinov http://musinov.blogspot.com/
Дата: 10.08.12 18:43
Оценка: 4 (1)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>>view — только destination, source у меня нет.


L_L>брал из эпплова примера такое: [self registerForDraggedTypes:[NSImage imagePasteboardTypes]], из за этого, собственно, и возникли проблемы.


В registerForDraggedTypes передается описание содержимого, а не типы файлов.
Как вариант, обработать в самом draggingEntered имена файлов на соотвествие нужного UTI.

#import "DragDropView.h"

@implementation DragDropView

- (id) initWithFrame : (NSRect) frame
{
    self =  [ super initWithFrame : frame ];
    
    if (self)
    {
       [ self registerForDraggedTypes : [ NSArray arrayWithObjects : NSFilenamesPboardType, nil ] ];
    }
    
    return self;
}


- (NSDragOperation) draggingEntered : (id<NSDraggingInfo>) sender
{
    NSPasteboard *pboard;
    NSDragOperation sourceDragMask;
    
    sourceDragMask = [sender draggingSourceOperationMask];
    pboard = [sender draggingPasteboard];
   
    if ([[pboard types] containsObject:NSFilenamesPboardType])
    {
        NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType];
        
        for (NSString* path in paths)
        {
            NSError *error = nil;
            NSString *utiType = [[NSWorkspace sharedWorkspace]typeOfFile:path error:&error];
            if (![[NSWorkspace sharedWorkspace]type:utiType conformsToType:(id)kUTTypeImage])
                return NSDragOperationNone;
        }            
    }
    
     return NSDragOperationLink;
}

@end
Best regards,
Alexey Musinov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.