objective-c – 如何使用NSStatusItem作为拖放目的地?

objective-c – 如何使用NSStatusItem作为拖放目的地?,第1张

概述我正在尝试构建一个应用程序,允许用户将文件从Finder拖到菜单栏图标进行处理.我在旅程中取得了进步,但我似乎不敢高峰.我尝试子类化NSView并实现拖动消息. @interface CMDroppableView : NSView <NSMenuDelegate> 我不仅要接受拖动 *** 作,而且要在用户点击图标时提供一个NSMenu.我设法使NSMenu正确显示,但拖拽功能仍然难以捉摸. 这是我的理 我正在尝试构建一个应用程序,允许用户将文件从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];

依然没有.那么我哪里错了?

谢谢!

解决方法 编辑:呃,你正在-awakeFromNib中注册拖动类型,如果没有从一个笔尖加载视图,那么这个拖动类型就不会被调用.尝试在-initWithFrame中注册您的拖动类型:而不是!

老回答:

IIRC您不需要在状态项目上设置菜单.我做的是让我的自定义视图管理一个菜单,并执行以下 *** 作:

- (voID)setMenu:(NSMenu *)menu {    [menu setDelegate:self];    [super setMenu:menu];}- (voID)mouseDown:(NSEvent *)event {    [statusItem popUpStatusItemmenu:[self menu]]; // or another method that returns a menu}- (voID)menuWillOpen:(NSMenu *)menu {    highlight = YES;    [self setNeedsdisplay:YES];}- (voID)menuDIDClose:(NSMenu *)menu {    highlight = NO;    [self setNeedsdisplay:YES];}- (voID)drawRect:(NSRect)rect {    NSImage *img = highlight ? [alternateImage copy] : [image copy];    NSRect bounds = [self bounds];    [statusItem drawStatusbarBackgroundInRect:bounds withHighlight:highlight];    // rest of drawing code goes here,including drawing img where appropriate}

在我的自定义视图的实现.这确保菜单行为与默认值相同.

总结

以上是内存溢出为你收集整理的objective-c – 如何使用NSStatusItem作为拖放目的地?全部内容,希望文章能够帮你解决objective-c – 如何使用NSStatusItem作为拖放目的地?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1251620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存