-
13-12-2019 - |
题
我正在尝试像张纸一样打开一个窗口,以便它显示在工具栏下方。我已经使用了O'Reilly教程来做到这一点。但是,我可以通过此错误:模态会话需要模态窗口。
如果我在选中,则窗口将作为窗口加载。
是否被检查,我得到“模态会话需要模态窗口”错误。
我有一个window.xib,progressmodal.xib。
在窗口实现文件中我使用:
-(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,它有“窗口”作为其类。所有连接都是通过此进行的。
但是,它再次加载窗口只是不会将其加载为模态。
任何想法?
解决方案 2
正如我上面所述的那样,我将一个对象拖到了ProgressModal窗口中,并通过该对象进行了连接。我应该完成的是文件的所有者我的窗口类。改变解决问题。
其他提示
在您的progressStatus
方法的第一行中放置以下内容:
NSLog(@"%@", window);
.
如果您看到日志输出为null,这就是为什么的原因。
使用xib创建模态表的步骤:
- 将面板拖到您的mainmenu.xib
- 在
@property (assign) IBOutlet NSPanel *sheetPanel;
文件中添加AppDelegate.h
- 生成的
AppDelegate.m
- 在步骤1中创建的mainmenu.xib中的面板的新引用插座链接到步骤2中创建的SheetPanel属性。
-
使用以下代码显示模态表:
[NSApp beginSheet:_sheetPanel modalForWindow:_mainWindow modalDelegate:self didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) contextInfo:nil];
@synthesize sheetPanel = _sheetPanel;
文件中的编辑:我假设您想要一个模态窗口。如果您想要表单,请不要使用runModalForWindow:
。
试试:
[NSApp beginSheet: window
modalForWindow: mainWindow
modalDelegate: nil
didEndSelector: nil
contextInfo: nil];
.
是一个好主意,以便在你需要的情况下定义回调;例如。
[NSApp beginSheet: window
modalForWindow: mainWindow
modalDelegate: self
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
. 不隶属于 StackOverflow