使用beginSheetModalForWindow时,以编程方式关闭NSAlert关闭警报:

时间:2012-03-04 22:26:15

标签: cocoa

当我这样调用时,我试图以编程方式关闭模态警报表:

[alert beginSheetModalForWindow:contacts modalDelegate:self didEndSelector:@selector(myAlertEnded:code:context:) contextInfo:NULL];

3 个答案:

答案 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];