Я - разработчик .Net, которому нужно перенести небольшую программу на Mac OS X. Я в основном это сделал (отчасти благодаря людям на этом сайте, спасибо!), Но есть ошибка, которая может помочь людям, которым я могу помочьс.
Я создаю инструмент, который находится в строке состояния, который при нажатии открывает окно с несколькими ссылками или кнопками.При нажатии на ссылки или кнопки они открывают веб-сайт или внешнюю программу.Проблема в том, что значок в строке состояния исчезает, когда я запускаю одну из этих внешних команд.Еще интереснее то, что место в строке состояния, где должна находиться иконка, все еще отвечает;это означает, что если я щелкну по области (даже без видимого значка), он все равно запустит код и откроет окно.
Вот текущий код:
tray.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'");
}
tray.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 запускается, когда изображение / кнопкапри щелчке изображение находится в трее в окне, которое открывается при нажатии на значок.На этом этапе монитор активности успешно запускается, но значок на панели состояния исчезает.
Я попытался вставить [super setNeedsDisplay: YES] в openActMon, но это не помогло.И я добавил [view setNeedsDisplay: YES] в openActMon, и он ответил необъявленным.
Я дал весь этот код, потому что, как я уже сказал, я не кодер Objective-C, но .Net, который простонужно портировать что-то маленькое.Надеюсь, что это будет полезно для других в будущем.Многое из этого я собрал вместе на разных форумах и сайтах или получил некоторую помощь от StackOverflow.Я надеюсь, что кто-то может помочь.
Заранее спасибо!