【问题标题】:Cocoa. How to show window in only tray application可可。如何仅在托盘应用程序中显示窗口
【发布时间】:2013-01-17 22:27:18
【问题描述】:

我为 Mac OS X 创建了一个仅限状态栏的应用程序。类似 http://d.pr/i/Covi 的东西。我通过本教程 http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/ 创建了它。现在我有一个问题:如何通过单击“关于”菜单项来显示窗口?我正在尝试:

#import "IGAppDelegate.h"
#import "IGAboutWindowController.h"

@implementation IGAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (void)awakeFromNib {
    _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [_statusItem setMenu:_menu];
    [_statusItem setTitle:@"LeoHelper"];
    [_statusItem setHighlightMode:YES];
}

#pragma mark - Actions



- (IBAction)quit:(id)sender {
    [NSApp terminate:self];
}

- (IBAction)about:(id)sender {
    IGAboutWindowController *aboutController = [[IGAboutWindowController alloc] init];
    [aboutController showWindow:self];
}
@end

【问题讨论】:

  • 您是否使用自动引用计数 (ARC)?
  • @NSGod 是的,我正在使用 ARC。我在下面尝试您的解决方案,让您知道我的结果!但我认为它会起作用:) 非常感谢!我还是不习惯 ARC...

标签: objective-c macos cocoa statusbar


【解决方案1】:

我猜测您正在使用自动引用计数 (ARC)。如果你是,那么下面是 about: 方法中将会发生的事情:

您首先创建IGAboutWindowController 的本地实例,然后告诉它显示其窗口。这将在屏幕上显示窗口,但是,如果您的项目使用 ARC,则该窗口将立即消失。这样做的原因是,一旦about: 方法结束,您的IGAboutWindowController 本地实例将被自动释放,因此,它的窗口将从屏幕上移除。

要在 ARC 管理的项目中成功实现此 about: 方法,您应该将 aboutController 定义为 IGAppDelegate 类的实例变量,如下所示:

@class IGAboutWindowController;

@interface IGAppDelegate : NSObject <...>

@property (nonatomic, strong) IGAboutWindowController *aboutController;

@end

然后像这样实现您的about: 方法:

- (IBAction)about:(id)sender {
    if (self.aboutController == nil)
       self.aboutController = [[IGAboutWindowController alloc] init];
    [aboutController showWindow:self];
}

【讨论】:

  • 另外,-[NSWindowController init] 没有做任何有用的事情。您需要改用initWithWindowNibName:initWithWindowNibName:owner:,或者在IGAboutWindowController 中覆盖init,以使用正确的笔尖名称发送initWithWindowNibName:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2011-07-04
相关资源
最近更新 更多