【问题标题】:Show sheet for new document window显示新文档窗口的工作表
【发布时间】:2012-12-02 14:59:06
【问题描述】:

当用户在基于NSDocument 的 Cocoa 应用程序中创建新文档时,我希望新文档窗口显示一个表单,用户可以在其中设置一些初始文档参数。

但是,当通过“文件”>“打开”加载现有文档时,不应显示此工作表。

是否有任何现有的机制可以用来实现这一点?或者有什么推荐的方法吗?

【问题讨论】:

    标签: macos cocoa nsdocument


    【解决方案1】:

    在您的 NSDocument 子类中覆盖 initWithType:error:
    来自文档(参见NSDocument Class Reference):

    您可以重写此方法来执行创建新文档时必须执行但打开现有文档时不应执行的初始化。

    【讨论】:

    • 谢谢!我在哪里调用我的工作表的beginSheet... 方法?如果我把它放在initWithType:error: 中,工作表会显示在它自己的窗口中,而不是作为工作表附加到文档窗口。
    【解决方案2】:

    Jay 在his answer 中正确指出,为了确定NSDocument 子类的实例是否代表新文档而不是从文件加载的文档,initWithType:error: 必须被覆盖,它只会被调用对于新文件。但不幸的是,在那里启动工作表将不起作用,因为在调用 initWithType:error: 时尚未创建窗口。

    获得这个工作的缺失链接是设置一个名为例如的实例变量。 newDocumentYESinitWithType:error:。那么,对[NSApp beginSheet:…] 的实际调用必须在windowDidBecomeKey: 中进行。此外,newDocument 变量应在此处设置为NO,以防止每次窗口再次成为键时工作表都重新出现。

    【讨论】:

    • 好答案;这对我来说非常有效。 :) ...在某些情况下,可能需要检查文档设置是否存在,然后弹出工作表,即使是加载的文档(但当然只有一次)
    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多