当我这样调用时,我试图以编程方式关闭模态警报表:
[alert beginSheetModalForWindow:contacts modalDelegate:self didEndSelector:@selector(myAlertEnded:code:context:) contextInfo:NULL];
答案 0 :(得分:8)
我有同样的问题,我这样解决了。
1)启动工作表
[myAlertSheet beginSheetModalForWindow:self.view.window modalDelegate:self didEndSelector:@selector(showAlertDidEnd: returnCode: contextInfo:) contextInfo:nil];
2)以编程方式关闭模态表:
[NSApp endSheet:[myAlertSheet window]];
myAlertSheet
是一个NSAlert
实例变量,用于跟踪屏幕上的模态表格。然后,endSheet消息调用选择器:
- (void)showAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo
{...}
我希望以上有用的
答案 1 :(得分:5)
你的控制器中有一个这样的方法(modalDelegate
):
- (IBAction) cancelClicked: (id) sender {
// Cancel the sheet and close.
[NSApp endSheet: [self window]];
}
...将连接到模态表单中的“取消”按钮(或者连接到OK按钮,但这可能会调用一些衍生处理)。
您还需要实现此didEndSelector
以实际删除工作表:
- (void) didEndSheet: (id) modalSheet returnCode: (NSInteger) returnCode contextInfo: (void*) contextInfo {
// Remove the sheet.
[modalSheet orderOut: nil];
}
如果我没记错的话,我会从Apple文档中的一个示例中获取此信息。
答案 2 :(得分:3)
在NSWindow
中,您会找到一个名为attachedSheet
的方法。它会生成对附加到此窗口的工作表的引用(如果有)。表单本身也只是NSWindow
。因此,您可能想尝试这个:
NSWindow *window = [NSApp mainWindow];
[[window attachedSheet] close];