1

我正在寻找一个最简单的例子,它显示一个窗口打开另一个窗口然后关闭它。

我似乎被卡住的地方是NIB以及插座的接线方式。我可以轻松创建窗口;关闭它是一个挑战。

非常感谢任何建议!

我在下面附上我的代码。我认为我想做的很简单,但它不起作用。感谢弗朗西斯,我现在可以打开和关闭窗口,但是一旦我尝试再次打开它,应用程序就会崩溃(EXC_BAD_ACCESS)。我确信这是由于我对 NIB 与类的关系理解不足。在大多数语言中,我只需要实例化一个窗口的新实例,然后将其关闭。

我有 2 个窗口MainMenu.xib。(我更愿意将窗口放在单独的 NIB 中,但这似乎会产生其他问题!) AppDelegate 有 2 个出口,分别是 window (原始)和 otherWindow (创建的第二个窗口)。

第一个窗口有 2 个按钮:“打开窗口”和“关闭窗口”,它们连接到代码中的 2 个方法。

代码:

MyTestAppDelegate.h

#import <Cocoa/Cocoa.h>

@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
    NSWindow *otherWindow;
}

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSWindow *otherWindow;

- (IBAction)openOtherWindow:(id)sender;
- (IBAction)closeOtherWindow:(id)sender;

@end

MyTestAppDelegate.c

#import "MyTestAppDelegate.h"

@implementation MyTestAppDelegate

@synthesize window;
@synthesize otherWindow;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (IBAction)openOtherWindow:(id)sender
{
    [otherWindow makeKeyAndOrderFront:sender];
}

- (IBAction)closeOtherWindow:(id)sender
{
    [otherWindow close];
}
@end
4

2 回答 2

7

基本上,在您的 NIB 中,您可以创建各种窗口,添加按钮、文本字段等。然后添加一个自定义对象,该对象充当“控制器”,向窗口和各种控件发送和接收消息。在一个简单的项目中,您可以使用自动创建的 AppDelegate 对象来控制您的窗口,对于较大的项目,您需要一个单独的对象来处理逻辑,这可以是 NSObject 或 NSWindowController 的实例,具体取决于您的需要。

Windows 可以设置为“启动时可见”,在您的应用启动时打开它们。您还可以通过在头文件中创建 IBOutlet 引用并在 NIB 中连接它们来手动打开它们。要显示窗口,您向他们发送makeKeyAndOrderFront:消息。要关闭它们,您向它们发送一个close方法。

要响应窗口打开/关闭,您将控制器对象指定为窗口的“委托”,这意味着它将接收来自窗口的消息,这些消息列在 NSWindowDelegate 协议下的文档中。因此,如果您想打开一个窗口以响应另一个窗口关闭,您将侦听该windowWillClose:消息并告诉另一个窗口打开,反之亦然。

这是非常基本的东西,所以我建议您阅读 Hillegass 的书,或浏览一些在线可用的各种教程

编辑:

您的应用程序正在崩溃,因为您将 otherWindow 设置为“关闭时释放”由于您处于内存管理环境中,并且没有任何东西保留窗口,下次您尝试打开它时它已经被释放。解决方案是取消选中 NIB 文件中的“关闭时释放”。请注意,您还可以直接在 NIB 中将按钮操作makeKeyAndOrderFront:和其他窗口本身的方法连接起来。performClose:

于 2011-11-17T22:54:30.513 回答
0

使用 XCode 4.1 中的“UINavigationController”模板或 XCode 4.2 中的“Master-Detail Application”模板创建一个新项目,看看这些东西是如何工作的。

如果您对通过查看 XCode 模板来学习不感兴趣,请查看以下教程: http: //www.iosdevnotes.com/2011/03/uinavigationcontroller-tutorial/

于 2011-11-17T22:27:11.283 回答