objective-c - 显示 NSWindow

标签 objective-c cocoa nswindow

点击菜单项会显示一个 NSWindow,但只是第一次,为什么会这样,如何解决?

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

    [formsView showWindow:self];
}

最佳答案

这与我使用的代码相同并且有效。问题一定出在其他地方。

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

如果您不这样做,并且为窗口设置了启动时可见,您将得到与您描述的完全相同的症状。这是因为 initWithWindowNibName 加载 NIB 文件,并且由于 Visible At Launch 标志而显示窗口。但是如果你查看 NSWindowController 实例的 window 属性,你会发现它仍然是 nil。这就是当您再次调用 showWindow 时窗口不会重新显示的原因。 IB 中的连接将窗口与 Controller 关联起来。

Here's a project that has IB set up correctly.

以下是IB中的相关设置:

The relevant settings for IB

关于objective-c - 显示 NSWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962531/

相关文章:

ios - 具有序列顺序的 Coredata 获取请求

objective-c - 框架和动态库的主要区别是什么

cocoa - 使 NSWindow.isMovableByWindowBackground 与 NSTextField 一起使用

cocoa - 将 NSWindow contentViewController 替换为具有相同窗口大小的新 ViewController

c++ - 如何在openCV中规范化图像?

iphone - AFNetworking 卡住其他 Action

ios - 手动设置 UIPopover 箭头方向和位置

macos - 显示 NSSavePanel 时超时

swift - 如何在 Swift 中获取多行字符串文字的索引

objective-c - 窗口出现时未设置标签上的文本