无法在窗口上打开两次纸张

时间:2011-01-12 10:50:45

标签: objective-c cocoa xcode

我在第一次打开纸张时在窗口上打开一张纸 正确,但如果我关闭它,并尝试再次打开它不起作用,我 只是获得系统警报声。

- (IBAction) showSpeedSheet:(id)sender
{

 [NSApp beginSheet:addEditPackagePanel
    modalForWindow:[[NSApp delegate] window]
  modalDelegate:nil
    didEndSelector:nil
    contextInfo:nil];

}

-(IBAction)endSpeedSheet:(id)sender
{

 [NSApp endSheet:addEditPackagePanel];
 [addEditPackagePanel orderOut:sender];


}

我找不到什么问题,应用程序不会在日志上打印任何错误。

2 个答案:

答案 0 :(得分:4)

不需要代表。

发出蜂鸣声是因为系统认为窗口上已经打开了一张纸(无论该纸是否在技术上可见)。这不是最大的错误报告,但就是这样。

在我的代码表中有窗口控制器,我在附加到工作表关闭按钮的每个操作中执行以下两个步骤:

[NSApp endSheet:[windowController window]];
[windowController close];

通过这些步骤,后续工作表无需发出哔哔声即可显示。

答案 1 :(得分:0)

我认为您可能需要实现模态委托和didEndSelector。应该从did-end选择器调用orderOut。

[NSApp beginSheet:addEditPackagePanel
 modalForWindow:[[NSApp delegate] window]
 modalDelegate: self
 didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
 contextInfo: nil];

- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void*)contextInfo
{
    [sheet orderOut:self];
}

我相信只要调用endSheet就会将控制权发送到did-end选择器。