Cocoa:在实时窗口调整大小期间更新NSWindow内容视图之外的视图?

时间:2013-08-19 12:50:53

标签: objective-c macos cocoa

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

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

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

提前致谢...

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

1 个答案:

答案 0 :(得分:0)

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

(那是LGPL代码,所以你想在复制之前考虑它。但是你可以毫无顾虑地从中学习实现技术。)