3

如何在 Cocoa 中使用多个窗口?我创建了一个可可应用程序。当我运行该应用程序时,它会自动显示一个默认窗口。我在窗口中添加了一个按钮。当我单击按钮时,我想打开另一个名为 MySecondWindow 的窗口,它是我在 IB 中创建的。

我为 MySecondWindow 创建了窗口控制器(MySecondWindowController)并将其链接到 IB 中的 nib。当我单击主窗口中的按钮时,我正在调用一个创建 MySecondWindowController 实例的 IBAction 并NSApp beginSheet:使用[mySecondWindowObj window]. 我正在接收Modal session requires modal window消息NSlog。当我尝试打印[mySecondWindowObj window]NSLog,它会打印null..

我不知道该怎么办。应该做哪些必要的事情来完成这项工作?我需要帮助..

谢谢..

4

2 回答 2

3
YourWindowController* sheet;

[[NSApplication sharedApplication] beginSheet:[sheet window]
                               modalForWindow:[[NSApplication sharedApplication] mainWindow]
                                modalDelegate:nil
                               didEndSelector:nil
                                  contextInfo:nil];

确保您的窗口已正确实例化。确保未选中 IB 中的“启动时可见”选项。

编辑:我刚刚注意到您正在从单独的 nib 文件加载此窗口。确保您正确加载它。用这个:

YourWindowController* sheet = [[YourWindowController alloc] initWithWindowNibName:@"NameOfNibMinusExtension"];

还:

检查并确保“文件所有者”类型设置为您的自定义窗口控制器的类名,并且它的“窗口”设置为 Nib 中的窗口。

右键单击(或 Cmd+单击)文件的所有者,并确保“窗口”属性连接到相应的窗口。此外,再次确保未选中窗口的“启动时可见”。

于 2011-02-07T06:39:15.663 回答
1

按住 Control 键,单击并按住按钮,然后将一条线拖到 MySecondWindow。它会给你一个充满方法的小黑匣子:选择makeKeyAndOrderFront:

它的作用是在您单击按钮时使按钮(NSButton 的一个实例)将makeKeyAndOrderFront:消息发送到窗口。按钮是 NSControl 的子类,它实现了 Cocoa 中所谓的目标/动作系统。Interface Builder,当您拖动线条时,将按钮的目标设置为 MySecondWindow,并将操作设置为makeKeyAndOrderFront:. NSButton 然后在内部进行编程,以便在收到点击时将操作消息发送到目标。

有道理?

于 2011-02-07T05:48:16.943 回答