显示NSWindow

nuk*_*ukl 0 cocoa objective-c nswindow

单击菜单项显示NSWindow,但仅限第一次,为什么这样,以及如何解决它?

-(IBAction)menuClick:(id)sender
{   
    if (!formsView) {
        formsView = [[NSWindowController alloc] initWithWindowNibName:@"Forms"];
    }

    [formsView showWindow:self];
}
Run Code Online (Sandbox Code Playgroud)

SSt*_*eve 5

这是我使用的相同代码,它的工作原理.问题必须在其他地方.

问题不在于代码,而是Interface Builder中的设置.(我还在使用Xcode 3.2,所以在我的界面中,构建器是一个单独的应用程序.)确保xib中File's Owner的类设置为NSWindowController并且它的window出口连接到窗口.

如果您不这样做并且为窗口设置了Visible At Launch,您将获得您描述的症状.这是因为initWithWindowNibName加载NIB文件并且由于Visible At Launch标志而显示窗口.但是如果你看一下windowNSWindowController实例的属性,你会发现它仍然是零.这就是为什么showWindow再次打电话时窗口不会重新显示的原因.它是IB中将窗口与控制器相关联的连接.

这是一个正确设置IB的项目.

这是IB中的相关设置:

IB的相关设置