2012-01-02 4 views
1

У меня есть приложение Mac Cocoa, которое использует перетаскивание в приложении. Я хочу отключить перетаскивание таких вещей, как изображения из моего приложения в другие приложения, например Finder. Есть ли способ сделать это?Как отключить перетаскивание из моего приложения Cocoa?

+3

Почему вы хотите отключить * функции *? –

+0

У меня такая же ситуация. Я хочу перетащить 'NSWindow' в приложение, а данные перетаскивания - это' NSString', поэтому я могу разобрать его и узнать, что перетащил NSWindow'. Вне моего приложения перетаскиваемая строка не имеет смысла, кроме раскрытия внутренней информации. –

ответ

1

Если есть неподдельная причина, по которой вы не должны перетаскивать изображения за пределы приложения, то в вашем Info.plist вы должны указать declare your own UTI, который можно использовать в качестве типа перетаскивания для перетаскивания только для внутреннего использования.

Затем вы указываете свой пользовательский UTI при объявлении типов картона. Например, на вашем взгляде, что поддерживает перетаскивание:

//the UTI string should match the one in your Info.plist 
static NSString* kYourCustomUTIType = @"com.yourCompany.internalDragType"; 

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    NSSize dragOffset = NSZeroSize; 
    NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard]; 

    [pboard declareTypes:[NSArray arrayWithObject:kYourCustomUTIType] owner:self]; 
    [pboard setData:[[self image] TIFFRepresentation] forType:kYourCustomUTIType]; 

    [self dragImage:[self image] at:[self imageLocation] offset:dragOffset 
     event:theEvent pasteboard:pboard source:self slideBack:YES]; 

    return; 
} 

Конечно, вы должны убедиться, что ваше перетаскивание назначение понимает ваш внутренний тип сопротивления, а также.

В общем, однако, если у вас нет реальной причины, по которой изображения не следует перетаскивать за пределы приложения, вы должны просто разрешить поведение по умолчанию. Пользователи Mac ожидают, что перетащить «просто работать», и, разбив его, вы создадите свое приложение, а не в хорошем смысле.

Смежные вопросы