@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作为拖放目的地?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)