我试图显示NSPanel如纸。我天真地做一些沿着这些线路:

SheetController *sheetController = [[[SheetController alloc]
                                      initWithWindowNibName:@"Sheet"] autorelease];

[[NSApplication sharedApplication] beginSheet:sheetController.window 
                               modalForWindow:self.window
                                modalDelegate:self
                               didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) 
                                  contextInfo:nil];

出于某种原因,那逃避我,这是行不通的。当这部分代码被调用时,在片材暂时地闪烁(因为autorelease消息)。片材被从未钩到窗口。

如果任何人都可以点我在哪里可以找到更多的信息,那将是非常赞赏。

有帮助吗?

解决方案

这听起来像在检查“可见于启动”框用于IB面板的典型例子。先将其关闭。

其他提示

是的,你需要拥有这款控制器,只要你想让它继续工作。你不能只是创建它,自动释放它,让它死,你需要抓住它,只要你需要它。

不要忘了,如果你想运行此为“莫代尔”表(即它接管应用,直到用户将其关闭),你需要推动一个新的运行循环。

你所做的是显示的工作表,然后不是推一个新的循环,所以OS只是显示板,认为没有理由以保持其运行,从而将其关闭,并在下一行继续执行:

我通常做片按以下方式:

- (id)showPanelModalAgainstWindow: (NSWindow *)window
{
   [[NSApplication sharedApplication] beginSheet: panelToShow
                modalForWindow: window
                modalDelegate: self
                didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
                contextInfo: nil];

   [[NSApplication sharedApplication] runModalForWindow: panelToShow];
   if (m_returnCode == NSCancelButton) return nil;
}


- (void)sheetDidEnd:(NSWindow *)sheet
         returnCode:(int)returnCode
        contextInfo:(void  *)contextInfo
{
    UNUSED(sheet);
    UNUSED(contextInfo);
    m_returnCode = returnCode;
}

然后,在你接受和/或取消按钮的例程:

- (IBAction)continueButtonClicked:(id)sender
{
    UNUSED(sender);
    [[NSApplication sharedApplication] stopModal];
    [createAccountWizardPanel orderOut: nil];
    [[NSApplication sharedApplication] endSheet: createAccountWizardPanel
                                       returnCode: NSOKButton];

}

我敢肯定有这样做的稍微少代码-Y的方式,但我还没有看向深入它,因为这样一来工作完全正常迄今为止....

有关控制器和面板对象的生存期

先前的评论也与此有关 - 一定要了解你需要的显示模式面板时什么使用寿命期到底是什么物体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top