首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类NSSavePanel是可能的吗?

子类NSSavePanel是可能的吗?
EN

Stack Overflow用户
提问于 2013-10-09 19:48:47
回答 1查看 422关注 0票数 1

我想知道是否有一种方法可以子类NSSavePanel。或者,如果要创建一个虚拟对象,如何模仿NSSavePanel的初学者beginSheetModalForWindow:CompletionHandler函数?

代码语言:javascript
复制
-(void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger *))handler{

在实现.m类文件中的函数时,我忽略了如何实现块处理程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-09 22:26:03

简短答覆:否

更长的答案:这是龙

这是可能的,但东西可能会坏掉。还可以使用类别添加方法,它们可能工作,也可能不起作用。由于NSOpenPanel支持appear的实现方式出现了问题--各种诡计正在幕后进行,甚至只调用类上现有方法的方便类别方法也可能导致OS和对话框不显示错误。NSOpenPanel是一种微妙的生物,应该尽可能少地被触摸,而且永远都要非常小心。

将NSOpenPanel实例包装在另一个类中是另一回事,根本不应该打乱它。走那条路。

增编re:注释

beginSheetModalForWindow的声明是:

代码语言:javascript
复制
- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger result))handler

完成处理程序将获得一个指示按下哪个按钮的值。若要采取依赖于此的操作,可以使用标准if

代码语言:javascript
复制
NSOpenPanel *openPanel;
NSWindow *hostWindow;
...
[openPanel beginSheetModalForWindow:hostWindow
                  completionHandler:^(NSInteger returnCode)
                                    {
                                       if (returnCode == NSFileHandlingPanelOKButton)
                                       {
                                          // OK pressed
                                          ...
                                       }
                                       else
                                       {
                                          // Cancel pressed
                                          ...
                                       }

                                    }
];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19281224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档