gpt4 book ai didi

objective-c - Cocoa:从另一个窗口创建并关闭一个窗口

转载 作者:行者123 更新时间:2023-12-03 16:50:50 25 4
gpt4 key购买 nike

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

我似乎陷入困境的是 NIB 以及 socket 的接线方式。我可以轻松创建窗口;关闭它是一个挑战。

非常感谢任何建议!

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

我在 MainMenu.xib 中有 2 个窗口。 (我更喜欢将窗口放在单独的 NIB 中,但这似乎会产生其他问题!)AppDelegate 有 2 个导出,即窗口(原始)和 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

最佳答案

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

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

为了响应窗口的打开/关闭,您将 Controller 对象指定为窗口的“委托(delegate)”,这意味着它将从窗口接收消息,这些消息在 NSWindowDelegate 协议(protocol)下的文档中列出。因此,如果您想打开一个窗口来响应另一个窗口的关闭,您可以监听 windowWillClose: 消息并告诉另一个窗口打开,反之亦然。

这是非常基本的东西,所以我建议您阅读 Hillegass 书,或浏览一些不同的 tutorials available online .

编辑:

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

关于objective-c - Cocoa:从另一个窗口创建并关闭一个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8175194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com