gpt4 book ai didi

cocoa - 使用 NSStatusItem 进行拖放

转载 作者:行者123 更新时间:2023-12-03 16:02:30 26 4
gpt4 key购买 nike

我正在尝试编写一个应用程序,允许用户从 Finder 中拖动文件并将其放到 NSStatusItem 上。到目前为止,我已经创建了一个实现拖放界面的自定义 View 。当我将此 View 添加为 NSWindow 的 subview 时,它一切正常 - 鼠标光标提供适当的反馈,当放下时我的代码将被执行。

但是,当我使用与 NSStatusItem 的 View 相同的 View 时,它的行为不正确。鼠标光标给出适当的反馈,表明可以删除文件,但是当我删除文件时,我的删除代码永远不会被执行。

我需要做一些特殊的事情才能使用 NSStatusItem 进行拖放吗?

最佳答案

我终于开始测试它,它运行得很好,所以你的代码肯定有问题。

这是一个允许拖动的自定义 View :

@implementation DragStatusView

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//register for drags
[self registerForDraggedTypes:[NSArray arrayWithObjects: NSFilenamesPboardType, nil]];
}

return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
//the status item will just be a yellow rectangle
[[NSColor yellowColor] set];
NSRectFill([self bounds]);
}

//we want to copy the files
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
return NSDragOperationCopy;
}

//perform the drag and log the files that are dropped
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *pboard;
NSDragOperation sourceDragMask;

sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];

if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];

NSLog(@"Files: %@",files);
}
return YES;
}


@end

以下是创建状态项的方法:

NSStatusItem* item = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain];

DragStatusView* dragView = [[DragStatusView alloc] initWithFrame:NSMakeRect(0, 0, 24, 24)];
[item setView:dragView];
[dragView release];

关于cocoa - 使用 NSStatusItem 进行拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com