我正在尝试像工作表一样打开一个窗口,使其显示在工具栏下方。我已经使用O'Reilly教程来做到这一点。但是,我可以通过这个错误:模态会话需要模态窗口。
如果我选中“Visible At Launch”,窗口会加载为窗口。
是否检查我得到“模态会话需要模态窗口”错误。
我有一个Window.xib,ProgressModal.xib。
在Window实现文件中,我使用:
-(IBAction)loadProgress:(id)sender{
[self progressStatus:progressWindow];
}
- (void)progressStatus:(NSWindow *)window {
[NSApp beginSheet: window
modalForWindow: mainWindow
modalDelegate: nil
didEndSelector: nil
contextInfo: nil];
[NSApp runModalForWindow: window];
[NSApp endSheet: window];
[window orderOut: self];
}
- (IBAction)cancelProgressScrollView:(id)sender {
[NSApp stopModal];
}
我可能将ProgressModal.xib设置错误。我有一个NSObject,它有“Window”作为它的类。所有的联系都是通过它完成的。
但同样,它加载窗口只是不会将其作为模态加载。
有什么想法吗?
答案 0 :(得分:3)
将以下内容放在progressStatus
方法的第一行:
NSLog(@"%@", window);
如果您看到日志输出为空,那就是原因。
使用XIB创建模态工作表的步骤:
@property (assign) IBOutlet NSPanel *sheetPanel;
文件AppDelegate.h
{li> @synthesize sheetPanel = _sheetPanel;
在AppDelegate.m
文件中
使用以下代码显示模态表:
[NSApp beginSheet:_sheetPanel
modalForWindow:_mainWindow
modalDelegate:self
didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
contextInfo:nil];
答案 1 :(得分:1)
正如我上面所说,我在progressModal窗口中拖动了一个对象并通过它建立了连接。我应该做的是让File的所有者成为我的Window类。改变这一点解决了问题。
得到的答案 2 :(得分:0)
编辑:我以为你想要一个模态窗口。如果您需要工作表,请不要使用runModalForWindow:
。
试试这个:
[NSApp beginSheet: window
modalForWindow: mainWindow
modalDelegate: nil
didEndSelector: nil
contextInfo: nil];
最好定义一个回调,以防万一你需要它; e.g。
[NSApp beginSheet: window
modalForWindow: mainWindow
modalDelegate: self
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];