gpt4 book ai didi

objective-c - 打开一个新窗口并等待它关闭

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:22 25 4
gpt4 key购买 nike

我有一个用 objetive-c Cocoa 编写的 Mac OS X 应用程序。您可以在 this previous question 中看到大部分代码.本质上,您单击主窗口(应用程序委托(delegate))上的一个按钮,它会打开另一个窗口,用户可以在其中输入信息。

在以下代码中(当用户按下应用程序主窗口中的按钮时调用)

- (IBAction)OnLaunch:(id)sender {

MyClass *controllerWindow = [[MyClass alloc] initWithWindowNibName:@"pop"];
[controllerWindow showWindow:self];

NSLog(@"this is a log line");
}

NSLog 行在我调用 showWindow 后立即得到打印机。有没有办法等到 controllerWindow 关闭后继续 NSlog?

原因是用户在我打开的新窗口上设置了一个值,我需要在同一个 OnLaunch 上收集该值,所以我需要等待。

我知道模态窗口在 Mac 中的形式不佳,但我无法控制此功能。

我试过

[NSApp runModalForWindow:[controllerWindow window]];

然后设置弹窗为

[[NSApplication sharedApplication] runModalForWindow:popupwin];

它可以工作,但是焦点再也不会传递到主窗口了谢谢!

最佳答案

如果您希望窗口对于您的应用程序是模态的,请使用工作表:https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Sheets/Tasks/UsingCustomSheets.html

但是,在显示工作表时无法暂停方法的执行,这无异于阻塞当前运行循环。您必须按照链接文档中的描述将代码分解为开始和结束方法。

以下是您需要遵循的步骤:

  • TestAppAppDelegate 中创建一个 NSWindow 导出来保存您的工作表和一个关闭工作表的操作
  • 创建一个以 NSWindow 作为根对象的 nib。我想你已经在“流行”中有了这个。将 Visible at Launch 选项设置为 NO (这很重要)
  • 将此 nib 的文件所有者设置为 TestAppAppDelegate 并将窗口连接到您的新 socket ,将关闭按钮连接到您的新操作
  • 在启动工作表的方法 (OnLaunch) 中,使用以下代码:

(忽略这个是为了让代码格式正确!)

if(!self.sheet)
[NSBundle loadNibNamed:@"Sheet" owner:self];

[NSApp beginSheet:self.sheet
modalForWindow:self.window
modalDelegate:self
didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
contextInfo:nil];
  • 您的关闭按钮操作应该是 [NSApp endSheet:self.sheet];
  • 您的 didEndSheet: 方法应该是 [self.sheet orderOut:self];

关于objective-c - 打开一个新窗口并等待它关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7560462/

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