问题标签 [nspanel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5655 浏览

objective-c - EXC_BAD_ACCESS 调用块

更新 | 我已经使用面板​​上传了一个示例项目并在此处崩溃:http ://w3style.co.uk/~d11wtq/BlocksCrash.tar.gz (我知道“选择...”按钮什么也没做,我没有尚未实施)。

更新 2 | 刚刚发现我什至不需要调用任何东西newFilePanel来导致崩溃,我只需要在语句中使用它。

这也会导致崩溃:

似乎转储到控制台的最后一件事有时是:“无法反汇编 dyld_stub_objc_msgSend_stret。”,有时是:“无法访问地址 0xa 的内存”。

我创建了自己的工作表(一个 NSPanel 子类),它试图提供类似于 NSOpenPanel/NSSavePanel 的 API,因为它将自己呈现为工作表并在完成时调用一个块。

这是界面:

以及实现里面的关键方法:

如果我的块只是一个空主体的无操作,这一切都有效。当工作表被解除时,我的块被调用。

但是,当我尝试从块内部访问面板时,我会因 EXC_BAD_ACCESS 而崩溃。例如,这会崩溃:

从调试器中不清楚原因是什么。堆栈上的第一项(零 0)只是说“??” 并且没有列出任何内容。

-endSheet:returnCode:堆栈中的下一项(1 和 2)分别是对和的调用-dismissSheet:。查看调试器中的变量,似乎没有任何问题/超出范围。

我原以为面板可能已经发布(因为它是自动发布的),但即使-retain在创建它后立即调用它也无济于事。

我执行这个错误吗?

0 投票
1 回答
314 浏览

cocoa - 工作表和长时间运行的任务

用户单击按钮后,我需要运行一个复杂(即长)的任务。该按钮打开一个工作表,并使用 dispatch_async 和其他 Grand Central Dispatch 东西开始长时间运行的操作。

我已经编写了代码并且工作正常,但是我需要帮助来了解我是否正确地完成了所有操作,或者我是否忽略了(由于我的无知)任何潜在的问题。

用户单击按钮并打开工作表,该块包含长任务(在此示例中,它仅运行 for(;;) 循环该块还包含在任务完成时关闭工作表的逻辑。

该面板包含一个停止按钮,允许用户在任务完成之前停止任务

0 投票
1 回答
3475 浏览

cocoa - 以编程方式创建 HUD 窗口

当用户按下我的主视图时,我需要以编程方式创建一个类似 HUD 的窗口。这是我使用的代码,但我只得到一个标准窗口。

也许我没有使用正确的标志,但我没有在文档或谷歌上找到。有什么想法吗?

0 投票
2 回答
4435 浏览

cocoa - 如何创建一个浮动窗口,就像 twitter 一样漂浮在所有其他窗口之上?

当您单击上下文菜单“推文”时,推特应用程序有一个浮动窗口,它是 NSPanel 吗?如何?

0 投票
1 回答
428 浏览

cocoa - 是否可以在 NSPanel 上使用核心动画(效果)背后的模糊?

停靠项目的上下文菜单不仅是半透明的,而且还模糊了它后面的内容,这种效果是否适用于半透明浮动面板?这与工作表警报对话框中使用的效果相同(例如退出未保存的更改),但在这种情况下透明度不同,背景是浅色而不是深色

替代文字

一些背景,我们有一个经常使用全屏的专业应用程序,我们的浮动调色板有一些透明度,但显然,当背景非常活跃/嘈杂时,我们的透明度越高,阅读它们上的文本就越困难,如果我们可能会有轻微的模糊,我们将能够大大提高文本的可读性,同时仍然允许一些“调色板后面的内容”的上下文

0 投票
1 回答
2877 浏览

cocoa - 在没有关键窗口状态的 NSPanel 第一响应者中制作 NSView

是否可以在 NSPanel 第一响应者状态中提供 NSView 而不提供 NSPanel 键窗口状态(使主应用程序窗口辞职键)?

谢谢。

0 投票
1 回答
7058 浏览

objective-c - NSApp 的 ModalForWindow、NSAlert 的 ModalForWindow 和 ModalSession 的小技巧

我花了很多时间来消除对 Objective-C 的“ModalForWindow”语言以及如何使用模态会话的困惑。也许以下提示可以节省一些时间:

(如果您不熟悉这个概念:当窗口(通常是面板)运行模式时,它会阻止应用程序的其他部分响应,直到它被关闭。)

“ModalForWindow”在不同的情况下意味着不同的东西。如果您使用 loadNibNamed 来显示由 xib 定义的面板,并且希望它运行模式,请在显示后调用它:

并在其解雇方法中跟进:

但是对于 NSAlert,beginSheetModalForWindow 中的“窗口”是指将作为工作表附加到警报的窗口,该窗口将被冻结直到警报被解除。但应用程序不会被冻结;所有其他窗口将保持可操作。如果您想将警报附加为工作表并冻结 应用程序的其余部分,请按照 beginSheet 代码的简单调用 runModal 并明确使用返回代码,如下所示:

(当然,您已经实现了放弃AlertDidEnd:returnCode:contextInfo: 代码作为类方法。)

或者,如果您希望警报作为居中面板运行,请单独调用 runModal。

假设您要运行一个面板模式,如果用户提交了无效条目,则随后会发出警报。在显示警报之前,您必须停止模式 - 之后,由于某种原因,对 runModalForWindow 的另一个调用无法正常工作。对于这种情况,您需要一个模态会话

1) 将 NSModalSession 属性添加到您的控制器类,因为 modalSession 必须可以跨多个方法访问。

2) 显示面板后,调用 beginModalSessionForWindow 实例化 modalSession:

3) 用一个调用 runModalSession 的 while 循环跟进,当它的返回不等于 NSRunContinuesResponse 时中断:

当用户单击面板的一个按钮时,循环将中断,应用程序将被释放。(在面板的文本字段中键入将使模态会话保持不变。)

4)在你的按钮处理中,如果用户的输入无效,你用runModal调用一个警报。

5) 在警报调用的正下方,在警报解除后将执行的代码中,您放置了上面使用的相同 while 循环。面板的模态会话恢复。

6) 在您关闭面板的处理中,无论是在有效输入还是取消时,您都会调用 endModalSession,奇怪的是,这还不够;即使您从未调用过 runModalForWindow,您也必须调用 stopModal。

0 投票
2 回答
14597 浏览

objective-c - 设置 NSWindow 焦点

我有一个带有一个窗口和一个面板的应用程序,附加到这个窗口。

脚步:

  1. 停用我的应用程序(应用程序打开,但没有焦点)
  2. 单击面板上的按钮(面板现在聚焦,但主窗口没有)

如何从面板将焦点设置到主窗口(父窗口)?

0 投票
3 回答
1724 浏览

cocoa - HUD NSPanel 不太透明

我一直在网上搜索,但我还没有遇到更改 HUD 透明度的方法(所有面板透明度,包括标题栏)。有可能改变它吗?

谢谢

0 投票
1 回答
204 浏览

cocoa - 通过背景移动 NSPanel,上面有一些 NSView

我有一个NSPanel. 当面板为空时,按住并拖动它的背景可以很好地移动。但是,如果我在上面放一些东西,新视图覆盖的区域将不再可拖动。例如,我可以NSImageView完全填充面板。并且面板不再被拖动。但是,即使用户按住图像视图,我也想让这个可拖动。我应该怎么做?