Перетащите в NSView

Я тестирую перетаскивание в NSView, но draggingEntered: никогда не называется. код:

#import <Cocoa/Cocoa.h>
@interface testViewDrag : NSView <NSDraggingDestination>
@end

@implementation testViewDrag
- (id)initWithFrame:(NSRect)frame
{
   self = [super initWithFrame:frame];
   if (self)
{
    [self registerForDraggedTypes:[NSImage imagePasteboardTypes]];
    NSLog(@"initWithFrame");
}
return self;
}

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
NSLog(@"draggingEntered");
return NSDragOperationEvery;
}

-(NSDragOperation) draggingUpdated:(id<NSDraggingInfo>)sender
{
  NSLog(@"draggingUpdated");
  return NSDragOperationEvery;
}
@end

в построителе интерфейса я добавляю subView (класс установлен в testViewDrag) к главному окну. в журнале я вижу initWithFrame журнал, но когда я перетаскиваю ничего не отображается в журнале.

чего мне не хватает?

1 ответ

Решение

"Чтобы получать операции перетаскивания, вы должны зарегистрировать типы монтажной панели, которые будет принимать ваше окно или представление, отправив объекту сообщение registerForDraggedTypes:, определенное как в NSWindow, так и в NSView, и реализовать несколько методов из протокола NSDraggingDestination. Во время сеанса перетаскивания кандидат-получатель получает сообщения NSDraggingDestination, только если адресат зарегистрирован для типа монтажной панели, который соответствует типу перетаскиваемых данных монтажной области. Адресат получает эти сообщения по мере того, как изображение входит, перемещается внутри, а затем выходит или освобождается в пределах границ назначения ". Вы можете прочитать больше о теме программирования методом перетаскивания здесь. На мой взгляд, ваша проблема заключается в аргументе, который вы определяете в своем registerForDraggedTypes: метод.

Попробуйте заменить его на это:

[self registerForDraggedTypes:[NSArray arrayWithObjects:
        NSColorPboardType, NSFilenamesPboardType, nil]];

Надеюсь это поможет!

Другие вопросы по тегам