Cocoa NSApp可可纸问题
这就是我要做的。我需要提示用户输入密码提示,在用户输入密码并点击(比如)工作表上的Enter按钮之前,我希望防止在后台解析代码。 下面是运行工作表的代码,当用户输入密码并点击Enter键时,endSpeedSheet将运行。我从Main()函数调用所有这些函数 我注意到的是,当主函数运行时,工作表显示出来,提示用户输入密码。但在后台,我已经看到“代码到达这里”已经运行。这意味着代码已经在后台运行。我需要的是代码在密码提示下等待,然后在工作表被删除后使用此密码。你知道我在这里遗漏了什么吗?(提前感谢:)Cocoa NSApp可可纸问题,cocoa,Cocoa,这就是我要做的。我需要提示用户输入密码提示,在用户输入密码并点击(比如)工作表上的Enter按钮之前,我希望防止在后台解析代码。 下面是运行工作表的代码,当用户输入密码并点击Enter键时,endSpeedSheet将运行。我从Main()函数调用所有这些函数 我注意到的是,当主函数运行时,工作表显示出来,提示用户输入密码。但在后台,我已经看到“代码到达这里”已经运行。这意味着代码已经在后台运行。我需要的是代码在密码提示下等待,然后在工作表被删除后使用此密码。你知道我在这里遗漏了什么吗?(提前感
答案很简单:在调用
-showSpeedSheet:
后,不要直接输入工作表完成后需要运行的代码。工作表是异步的,因此您必须考虑代码,以便只在工作表完成后调用它
- (IBAction) showSpeedSheet:(id)sender
{
[NSApp beginSheet:speedSheet
modalForWindow:self.window
modalDelegate:self
didEndSelector:@selector(speedSheetDidEnd:returnCode:contextInfo:)
contextInfo:nil];
}
- (IBAction)endSpeedSheet:(id)sender
{
self.joinPassword = [joinPasswordLabel stringValue];
[NSApp endSheet:speedSheet];
[speedSheet orderOut:sender];
}
- (void)speedSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
if(sheet == speedSheet)
{
//the sheet has ended, so do something
}
}
这就是-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
方法中的didEndSelector
参数的作用。您传入一个选择器,该选择器将在图纸关闭时调用。在模态委托对象中,实现此选择器,并在工作表完成后执行需要执行的任何处理
- (IBAction) showSpeedSheet:(id)sender
{
[NSApp beginSheet:speedSheet
modalForWindow:self.window
modalDelegate:self
didEndSelector:@selector(speedSheetDidEnd:returnCode:contextInfo:)
contextInfo:nil];
}
- (IBAction)endSpeedSheet:(id)sender
{
self.joinPassword = [joinPasswordLabel stringValue];
[NSApp endSheet:speedSheet];
[speedSheet orderOut:sender];
}
- (void)speedSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
if(sheet == speedSheet)
{
//the sheet has ended, so do something
}
}
谢谢你,罗布。这帮了大忙。我现在让它工作了。如果有人偶然发现了这个链接,也可以查看一下。我觉得这很有帮助: