我有一个 NSOpenPanel,我想在用户单击确定后对选择进行一些验证。我的代码很简单:
void (^openPanelHandler)(NSInteger) = ^(NSInteger returnCode) {
if (returnCode == NSFileHandlingPanelOKButton) {
// do my validation
[self presentError:error]; // uh oh, something bad happened
}
}
[openPanel beginSheetModalForWindow:[self window]
completionHandler:openPanelHandler];
[self window]
是一个应用程序模式窗口。面板以工作表形式打开。到目前为止,一切都很好。
苹果的文档说,完成处理程序应该在“用户关闭面板后”被调用。但就我而言,它是在按下“确定/取消”按钮时立即调用的,而不是在面板关闭时调用。这样做的效果是错误警报在打开的面板上方打开,而不是在面板关闭后打开。它仍然有效,但它不像 Mac。
我希望用户单击确定,打开的面板折叠起来,然后出现警报表。
我想我可以使用延迟选择器来显示警报,但这似乎是一种黑客行为。