Mr *_*eph 3 macos cocoa objective-c
我有一个用 Objective-C Cocoa 编写的 Mac OS X 应用程序。您可以在上一个问题中看到大部分代码。本质上,您单击主窗口(应用程序委托)上的按钮,它会打开另一个窗口,用户可以在其中输入信息。
在以下代码中(当用户按下应用程序主窗口中的按钮时调用)
- (IBAction)OnLaunch:(id)sender {
MyClass *controllerWindow = [[MyClass alloc] initWithWindowNibName:@"pop"];
[controllerWindow showWindow:self];
NSLog(@"this is a log line");
}
Run Code Online (Sandbox Code Playgroud)
NSLog我打电话后,线路立即得到打印机showWindow。有什么办法可以等到controllerWindow关闭后再继续NSlog吗?
原因是用户在我打开的新窗口上设置了一个值,我需要在同一窗口上收集该值,OnLaunch所以我需要等待。
我知道模式窗口在 Mac 中是不好的形式,但我无法控制此功能。
我尝试过
[NSApp runModalForWindow:[controllerWindow window]];
Run Code Online (Sandbox Code Playgroud)
然后将弹出窗口设置为
[[NSApplication sharedApplication] runModalForWindow:popupwin];
Run Code Online (Sandbox Code Playgroud)
它可以工作,但焦点再也不会传递到主窗口了,谢谢!
如果您希望窗口为应用程序的模式,请使用工作表: https: //developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Sheets/Tasks/UsingCustomSheets.html
但是,在显示工作表时无法暂停方法的执行,这相当于阻塞当前的运行循环。您必须将代码分解为开始和结束方法,如链接文档中所述。
以下是您需要遵循的步骤:
TestAppAppDelegate一个NSWindow插座来保存您的工作表和一个操作来关闭工作表NSWindow创建一个以 an作为根对象的笔尖。我认为你已经在“流行”中拥有了这个。将选项设置Visible at Launch为NO (这非常重要)TestAppAppDelegate并将窗口连接到新插座,并将关闭按钮连接到新操作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];
Run Code Online (Sandbox Code Playgroud)
[NSApp endSheet:self.sheet];didEndSheet:方法应该是[self.sheet orderOut:self];| 归档时间: |
|
| 查看次数: |
6698 次 |
| 最近记录: |