我想知道是否有一种方法可以子类NSSavePanel。或者,如果要创建一个虚拟对象,如何模仿NSSavePanel的初学者beginSheetModalForWindow:CompletionHandler函数?
-(void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger *))handler{在实现.m类文件中的函数时,我忽略了如何实现块处理程序。
发布于 2013-10-09 22:26:03
简短答覆:否
更长的答案:这是龙
这是可能的,但东西可能会坏掉。还可以使用类别添加方法,它们可能工作,也可能不起作用。由于NSOpenPanel支持appear的实现方式出现了问题--各种诡计正在幕后进行,甚至只调用类上现有方法的方便类别方法也可能导致OS和对话框不显示错误。NSOpenPanel是一种微妙的生物,应该尽可能少地被触摸,而且永远都要非常小心。
将NSOpenPanel实例包装在另一个类中是另一回事,根本不应该打乱它。走那条路。
增编re:注释
beginSheetModalForWindow的声明是:
- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger result))handler完成处理程序将获得一个指示按下哪个按钮的值。若要采取依赖于此的操作,可以使用标准if
NSOpenPanel *openPanel;
NSWindow *hostWindow;
...
[openPanel beginSheetModalForWindow:hostWindow
completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSFileHandlingPanelOKButton)
{
// OK pressed
...
}
else
{
// Cancel pressed
...
}
}
];https://stackoverflow.com/questions/19281224
复制相似问题