gpt4 book ai didi

COCOA:NSStatusitem 图标在启动外部代码时消失

转载 作者:行者123 更新时间:2023-12-03 17:44:00 26 4
gpt4 key购买 nike

我是一名 .Net 开发人员,需要将一个小程序移植到 Mac OS X。我已经完成了大部分工作(部分感谢此网站上的人员,谢谢!),但有一个错误,也许我可以得到帮助与。

我正在创建一个位于状态栏中的工具,单击该工具会打开一个带有多个链接或按钮的窗口。单击链接或按钮时,它们会打开网站或外部程序。问题是,当我启动这些外部命令之一时,状态栏中的图标消失了。更有趣的是,状态栏上应该有图标的地方仍然有反应;这意味着如果我单击该区域(即使没有可见的图标),它仍然会运行代码并打开窗口。

这是当前代码:

托盘.m

#import "tray.h"
#import "MyView.h"

@implementation Tray
-(void) awakeFromNib{
NSBundle *bundle = [NSBundle mainBundle];
statusItem = [[NSImage alloc] initWithContentsofFile:[bundle pathForResource:"@icon" ofType:@"png"]];
MyView *view = [MyView new];
[statusItem setImage:statusImage];
view.image = statusImage;
[statusitem setView:view];
[statusitem setToolTip:@"Tray App"];
[view setTarget:self];
[view setAction:@selector(openWindow)];
}

-(IBAction)openWindow:(id)sender{
[trayWin makeKeyAndOrderFront:nil];
}

-(IBAction)openActMon:(id)sender {
(void)system("open '\/Applications/Utilities/Activity Monitor.app'");
}

托盘.h

#import "MyView.h"

@interface Tray : NSObject {
NSStatusItem *statusItem;
NSImage *statusImage;

IBOutlet NSWindow * trayWin;
IBOutlet NSButton *ActMon;

void *openWindow;
}

@property (retain,nonatomic) NSStatusItem *statusItem;
-(IBAction)ActMon:(id)sender;
@end

MyView.h

@interface MyView : NSControl {
NSImage *image;
id target;
SEL action;
}
@property (retain)NSImage *image;
@property (assign) id target;
@property (assign) SEL action;
@end

MyView.m

#import "MyView.h"
@implementation MyView;
@synthethize image, target, action;
-(void)mousemouseUP:(NSEvent *)event{
[NSApp sendAction:selfself.action to:self.target from:self];
}
-(void)dealloc {
self.image = nil;
[super dealloc];
}
-(void)drawRect:(NSRect)rect {
[self.image drawInRect:CGRectMake(0,0,18,18) fromRect:NSZeroRect operation:NSCompositeSourceOver];
}
@end
}

单击图像/按钮时运行 openActMon,图像位于单击图标时打开的托盘Win 窗口中。此时,Activity Monitor 成功启动,但 StatusBar 中的图标消失。

我尝试在 openActMon 中添加 [super setNeedsDisplay:YES],但这没有帮助。我在 openActMon 中添加了 [view setNeedsDisplay:YES] 并且它未声明响应。

我给出了所有这些代码,因为正如我所说,我不是 Objective-C 编码员,而是 .Net 编码员,只需要移植一些小东西。希望这对将来的其他人有帮助。其中很多内容是我从不同的论坛和网站上拼凑而成的,或者是从 StackOverflow 上的一些帮助中获得的。我希望有人能提供帮助。

提前致谢!

最佳答案

awakeFromNib中添加:

[statusitem retain];

关于COCOA:NSStatusitem 图标在启动外部代码时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4598710/

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