编辑:如果有人想查看实际代码,请按以下步骤操作: http://pastie.org/713951
长话短说:我遇到的问题是我无法让窗口显示在fly()函数中。
完整说明:
我正在为Mac应用程序'Coda'创建一个插件。我有一个控制器'Bolder',有两个插座:
@class Bolder;
@interface Bolder : NSObject
{
IBOutlet id MyLabel;
IBOutlet id theWindow;
}
Coda指定它自己的插件的init方法。在这个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时都会显示我的插件窗口。
答案 0 :(得分:0)
如果您不想在加载笔尖时显示该窗口,请取消选中Interface Builder中的“Visible At Launch”。
答案 1 :(得分:0)
尝试延迟你的笔尖加载,直到显示窗口为止。 E.g:
- (void)fly:(id)sender
{
if (!theWindow)
{
[NSBundle loadNibNamed:@"Superman" owner:self];
}
else
{
[theWindow makeKeyAndOrderFront:self];
}
}