Как использовать NSStatusItem в качестве места назначения перетаскивания?

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

@interface CMDroppableView : NSView <NSMenuDelegate>

Я хотел не только принимать операции перетаскивания, но и предоставлять NSMenu, когда пользователь щелкает значок. Я' Мне удалось заставить NSMenu отображаться правильно, но функциональность перетаскивания остается неуловимой.

Насколько я понимаю, мне нужно было зарегистрировать принятые типы перетаскивания, которые я сделал здесь:

-(void)awakeFromNib{
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}

Сообщения перетаскивания:

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

-(NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender{
    return NSDragOperationCopy;
}

-(void)draggingExited:(id <NSDraggingInfo>)sender{
    NSLog(@"Drag Exit");
}

-(BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender{
     return YES;
}

-(BOOL)performDragOperation:(id <NSDraggingInfo>)sender{
    return YES;
}

Вот код, в котором задан пользовательский вид:

statusItemView = [[CMDroppableView alloc] init];
[statusItemView retain];
[statusItemView setMenu: statusMenu];

[statusItem setView: statusItemView];   

По-прежнему ничего. Так в чем же я ошибся?

Спасибо!

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