0

编辑:如果有人想查看实际代码,这里是: http: //pastie.org/713951

长话短说:我遇到的问题是我不能让窗口显示在 fly() 函数中。

完整说明

我正在为 Mac 应用程序“Coda”创建一个插件。我有一个控制器“Bolder”,有两个插座:

@class Bolder;

@interface Bolder : NSObject
{
    IBOutlet id MyLabel;
    IBOutlet id theWindow;
}

Coda 为插件指定了它自己的 init 方法。在这个初始化方法中,我正在加载一个 Nib 'Superman' 并选择一个方法 'fly' 在我的插件被点击时调用:

[NSBundle loadNibNamed:@"Superman" owner:self];
[controller registerActionWithTitle:NSLocalizedString(@"OK!", @"Flying Man") target:self selector:@selector(fly:)];

在“fly”方法中,我想显示窗口并更改标签上的文本:

- (void)fly:(id)sender
{
    [theWindow orderFront:self];
    [theWindow makeKeyAndOrderFront:self];
    [MyLabel setStringValue:@"new text"];
}

最后一点是让我感到震惊的部分——窗口只是没有出现!然而,如果我将这三行放在 'awakeFromNib' 中,它会显示得很好。造成这种差异的原因是什么?我无法将此代码放入 awakeFromNib 中,因为这会导致每次启动 Coda 时都会显示我的插件窗口。

4

2 回答 2

0

如果您不希望它在加载笔尖时显示,请取消选中 Interface Builder 中窗口的“启动时可见”。

于 2009-11-23T01:12:26.527 回答
0

尝试延迟 nib 加载,直到显示窗口。例如:

- (void)fly:(id)sender
{
    if (!theWindow) 
    {
        [NSBundle loadNibNamed:@"Superman" owner:self];
    }
    else
    {
        [theWindow makeKeyAndOrderFront:self];
    }
}
于 2009-11-25T02:28:24.700 回答