问题标签 [cocoa-sheet]

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 回答
6076 浏览

objective-c - 为什么我的工作表没有附加到运行它的窗口?

我有一个包含两个窗口的 NIB,一个是应用程序的主窗口在启动时可见,另一个是自定义工作表(因此在启动时不可见)。当需要工作表时,我的控制器调用:

[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];

它显示工作表窗口并启动一个模态会话,该窗口有一个标准的 Aqua 标题栏,没有“连接”到主窗口,并且可以像常规窗口一样移动。不用说,这是不可取的:-)。为什么工作表窗口不会“弹出”它运行的窗口,就像工作表通常以这种方式开始时所做的那样?

我想知道我在控制器内部开始工作表这一事实是否-awakeFromNib会产生影响,所以我将工作表移动到稍后可以触发的按钮动作上。这并没有改变行为。我还没有想过要尝试什么。我的目标是 10.5 SDK,使用 Xcode 3.1。

编辑:所以看起来我已经创建了一个模式对话框;工作表和应用程序模式对话框都使用该-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:方法启动。但是我如何指示我的窗口应该是一个工作表而不是模式对话框?

0 投票
2 回答
231 浏览

cocoa - mutilDocument 环境下如何禁用 Quit 功能?

我有一个 mutilDocument App ,我发现当我使用以下方法打开一个窗口时:

mainmeny 中的 Quit func 已经高亮了,这会让用户混淆 Quit app func 可以在这个环境下工作。我想禁用该下的 Quit func,怎么办?非常感谢!

0 投票
2 回答
958 浏览

cocoa - 如何使用工作表的返回值来决定是否关闭窗口?

我想windowShouldClose:在我的 NSWindowController 子类中使用弹出一个表单,询问用户是否要在使用 Save、Cancel 和 Don't Save 按钮关闭之前保存更改。

我遇到的问题是beginSheetModalForWindow:...使用委托而不是返回值。

我可以返回 NO in windowShouldClose:,但是当我发送[self close]到面板委托中的控制器时,什么也没有发生。

有人可以向我解释如何做到这一点或指出一些示例代码的方向吗?

0 投票
3 回答
6878 浏览

objective-c - 如何将 NSPanel 显示为工作表

我正在尝试将 NSPanel 显示为工作表。我天真地按照这些思路做一些事情:

出于某种我无法理解的原因,这不起作用。当调用这部分代码时,工作表会瞬间闪烁(因为autorelease消息)。床单永远不会挂在窗户上。

如果有人能指出我在哪里可以找到更多信息,那将不胜感激。

0 投票
2 回答
878 浏览

objective-c - Cocoa:处理线程结果,并排队多张工作表

我有一个多线程应用程序,它同时进行了许多并发操作。当每个线程完成时,它会调用主线程上的两个方法之一

当操作失败时,我启动一个显示错误消息的工作表并向用户显示 2 个按钮,“取消”和“重试”。这是我用来启动工作表的代码:

问题是,如果 2 个并发操作同时失败,那么当前显示的工作表会被最后一个失败消息覆盖,然后用户的“重试”操作只会重试最后一个失败的操作。理想情况下,我想将这些故障表“排队”。如果 2 个操作同时失败,那么您应该看到 2 个工作表一个接一个,允许用户单独取消或重试它们。

我试过使用:

这似乎做了我想要的,但在我的情况下不起作用。也许它不是线程安全的?

例如下面的代码工作......

但是,如果我有 2 个不同的线程操作在完成时调用 displaySheet(在主线程上),我只会看到一张纸,当我关闭它时,模态会话仍在运行,我的应用程序基本上被卡住了。

关于我做错了什么的任何建议?

0 投票
1 回答
2467 浏览

cocoa - Cocoa:NSApp beginSheet 设置应用程序委托?

我正在尝试在我的应用程序中显示自定义工作表,但我认为我做错了。虽然一切似乎都很好,但我有一个相当奇怪的副作用。(这需要几个小时才能弄清楚)。事实证明,每次我在应用程序中显示工作表时,应用程序委托都会设置为工作表的实例,因此我的控制器会被取消设置为委托,从而导致各种问题。

我创建了一个名为 FailureSheet.xib 的 NIB 文件。我在 IB 中布置了我的界面,然后创建了一个名为 'FailureSheet.m' 的 'NSWindowController' 的子类,我将其设置为文件的所有者。这是我的FailureSheet类:

这里没有什么复杂的事情发生。现在这就是我在“控制器”类中显示 FailureSheet 的方式:

现在,如果我在显示我的工作表之前记录 [NSApp 委托] 是什么,它是正确的 <Controller-0x012345>。然后,在运行此代码并且我的工作表启动后,如果我再次记录它,它是 <FailureSheet-0xABCDEF>。

不知道我在这里做错了什么 - 有什么想法吗?

0 投票
1 回答
225 浏览

multithreading - 片材和线材内存问题

最近我开始了一个项目,它可以将一些预先计算的 Grafix/Audio 导出到文件中,以供后处理。

我所做的只是在我的主 xib 中放置一个新窗口(带有进度指示器和一个中止按钮)并使用以下代码打开它:

后台线程 (pthread) 较早启动,以实际执行工作并保存所有 targas/wave 文件。效果很好,但是经过一段时间后,结果发现主线程不再响应,并且我的内存占用势不可挡。我尝试用 Instruments 调试它,并看到很多 CFHash 等东西增长到无穷大。

偶然我点击了工作表下方,暂时它有所帮助,主线程(AppKit?)正在释放它的东西,但只是一段时间。

我无法向我解释,首先我认为这是从我的线程访问 Progressbar 以更新进度(间隔为 0.5 秒),所以我把它删掉了。但是,即使我没有更新任何内容并且没有对进度条做任何事情,我的应用程序也会占用所有内存,因为没有释放它的“主事件”或任何东西。

有没有可能“耗尽”这个主线程内存的东西(Runloop / NSApp 调用?)。为什么主线程不再响应(在这个简单的任务之后)???

我没有clou了,请帮助!

提前致谢 !

PS你们如何实现“线程长任务”的东西并更新你的gui?

0 投票
1 回答
243 浏览

cocoa - 显示工作表时可用的主菜单

对通过鼠标单击或通过键盘调用的菜单项有何反应,例如: CMD+Q ?

0 投票
3 回答
1620 浏览

objective-c - 如何去除 Cocoa 添加到透明纸上的“模糊”效果?

默认情况下,当透明和半透明模态表应用于窗口时,Cocoa 会为它们添加背景模糊效果。我想禁用模糊效果。我该怎么做呢?

我创建了一个自定义工作表(具有透明背景和一些控件的 NSWindow 的子类)。我可以使用以下标准beginSheet方法显示它:

工作表显示正常,但其背后的一切都模糊了。

注意 1:我正在为触摸屏/信息亭类型的应用程序编写一个完全定制的用户界面,因此通常的 Apple 用户界面指南都不适用。

注2:确实想看看床单下面有什么。正如SirRatty指出的那样,可以通过填充背景来遮挡模糊部分。就我而言,我想让背景显示出来,而不会显得模糊。

0 投票
2 回答
9238 浏览

cocoa - NSWindowController 澄清理解

我曾多次在项目中使用过 NSWindowController,感觉我(非常)粗略地掌握了这个重要类背后的概念。我想用这篇文章来澄清/纠正我自己的理解,并希望能帮助其他学习者迈出理解的第一步。这是我发现最有用的一目了然的概念、概述和最佳实践,但文档中经常缺少这些内容。这是我对 NSWindowController 的看法(问题以粗体散布):

  • NSWindowController (NSWC) 子类(概念上)存在于每个窗口 nib 下方,充当用户界面元素和它们控制/表示的模型对象之间的粘合剂。基本上,应用程序中的每个窗口都应该有自己的 NSWC 子类。
  • nib 的文件所有者应始终是 NSWC 子类。MainMenu.xib 应用程序也是这样吗?
  • NSWCwindow属性应始终链接到 InterfaceBuilder 中的 NSWindow。
  • 您应该使用 覆盖“init”方法,[super initWithWindowNibName:]以便在您引用[mycontroller window]它时加载笔尖。MainMenu.xib 窗口的 NSWC 是否也应如此,即使它是在启动时打开的?
  • NSWC 不应该做太多繁重的工作——它应该简单地将消息传递给对象实例,并在 UI 中呈现这些对象。
  • 它可以使用绑定来修改 UI,或者充当表的委托等,或者通过在观察到更改时主动更改 UI 元素,或者以上任何一种的组合(您使用哪个似乎是一个问题味道,各方面都有利弊)。
  • NSWC 可以在必要时创建其他 NSWC 的实例(例如,当打开一次性子窗口时)。
  • 使用[mycontroller showWindow:nil]可在前面显示关联的窗口。如果您希望窗口显示为工作表,请使用以下内容:

    /li>

didEndSelector:应该是父窗口的NSWC的一个方法,可以通过[sheet windowController]. - 关闭窗口调用performClose:NSWC 的窗口的方法。

一些问题:

  • MainMenu 窗口的 NSWC 也应该是应用程序委托,还是应该是不同的类?
  • 同样,主要 NSWC 应该处理文件(拖放和打开),还是应该将其传递给应用程序委托,或者这只是一个品味问题?

如果这是不好的做法,或者完全是错误的,请纠正我。我希望澄清我对 NSWindowController 的理解,因此任何补充(以最佳实践、经验、陷阱的形式)都将受到高度赞赏。

谢谢,劳里