从另一个模态对话框打开一个模态对话框(模态窗口或工作表)



我需要打开一个模态窗口,它可以打开另一个模态窗口(或工作表)。第一个窗口工作正常,但第二个窗口表现奇怪。

这是我打开第一个窗口的方式:

RegisterDialog * registerDialog=[[RegisterDialog alloc] initWithWindowNibName:@"RegisterDialogMac"];
NSWindow* window = [registerDialog window];
[NSApp runModalForWindow:window];

这个窗口行为正常,并响应任何按钮,我只是添加了一点代码,以停止模态事件循环后按下一个红色按钮:

- (void)windowWillClose:(NSNotification *)notification {
[[NSApplication sharedApplication] stopModal];
}

Ok。现在我打开第二个对话框窗口,如果用户按下"注册"按钮:

-(IBAction)registerPressed:(id)sender {
RegistrationDialogMac* registrationDialog=[[RegistrationDialogMac alloc] initWithWindowNibName:@"RegistrationDialogMac"];   
NSWindow* window = [registrationDialog window];
[NSApp runModalForWindow:window];
}

第二个对话框窗口也可以正常工作,但只有按下红色按钮时才会关闭。

这就是取消"按钮已处理:

-(IBAction)cancelPressed:(id)sender {
[NSApp stopModal];
[[self window] close];
}

按下它后,模态事件循环停止,第一个对话框窗口变为活动窗口,但第二个窗口仍然保持在这里。只有我按下红色按钮,它才会关闭。这很奇怪,因为第一个模态窗口是由相同的代码正确关闭的。

Ok。我尝试走不同的路线,并运行第二个对话框窗口作为一个工作表:

-(IBAction)registerPressed:(id)sender {
RegistrationDialogMac* registrationDialog=[[RegistrationDialogMac alloc] initWithWindowNibName:@"RegistrationDialogMac"];
NSWindow* window = [registrationDialog window];
[self.window beginSheet: window
completionHandler:^(NSModalResponse returnCode) {   }
];
}

(我关闭了"启动时可见"正确绘制附在第一个对话框窗口上的工作表)这样将绘制第二个对话框窗口,但忽略所有按钮的按下。图形按钮被按下,但没有被处理。这段代码:

-(IBAction)cancelPressed:(id)sender {
NSLog(@"!");
[[self window] close];
//[NSApp endSheet:[self window]];  // may be this would be correct way to close sheet? Don't know as this method isn't run anyway
}

根本不执行,没有单独的"!"日志中的字符。

所以我做错了什么。实际上我几乎没有任何Mac编程经验,只有Windows。

发现第二个对话框的[self window]nil,所以它不能响应close。检查了.xib -是的,我忘记将window出口连接到窗口本身。修复,窗口现在正确关闭。

这并不能解决当第二个对话框被绘制为工作表时按钮无响应的问题。

相关内容

  • 没有找到相关文章

最新更新