2

我有一个NSWindow带有工具栏的标准。工具栏的一项是自定义视图 - 具体来说,一个NSTextField. (更具体地说,它是一个计时器应用程序——计时器的控件和数字显示都在工具栏中,其他内容在窗口的内容区域中。这NSTextField是数字显示。)

stringValue通常,我只是通过更改 ' ' 的属性每秒更新一次计时器NSTextField,这会导致它自行更新。但是在实时窗口调整大小期间,即使更新 ' stringValue' 属性的代码正在运行(我已经用 验证过NSLog),NSTextField在窗口大小调整完成之前不会再次绘制自身。同时,内容区域内的东西正在自我更新。

我已经尝试了所有我知道的方法来告诉它NSTextField自己绘制,但它只是拒绝发生,直到实时调整大小完成。有任何想法吗?显然它必须以某种方式成为可能,因为工具栏与窗口的其余部分一起调整大小 - 所以你认为可以强制它在subviews移动它们时重新绘制一个或多个。我假设我可以通过subclassing 一些东西来破解它,但是我的 Cocoa-fu 还不够强大,无法找出最简单/最合适的方法。

提前致谢...

编辑:我想出了一个解决方案——它不是很好,但它现在大部分都有效。它在我下面的评论中。

4

1 回答 1

1

-[NSWindow displayIfNeeded]只需在将视图标记为需要显示后调用。我在实现Wine的 Mac 驱动程序(一个在 OS X 和其他类 Unix 操作系统上运行 Windows 软件的开源项目)时遇到了这个问题。
http://source.winehq.org/source/dlls/winemac.drv/cocoa_window.m?v=wine-1.7.11#L1905

(这是 LGPL 代码,所以你要在复制它之前考虑一下。但你可以从中学习实现技术而无需担心。)

于 2014-02-18T22:53:40.530 回答