我有一个带工具栏的标准NSWindow
。工具栏的一个项目是自定义视图 - 特别是NSTextField
。 (更具体地说,它是一个计时器应用程序 - 计时器的控件和数字显示都在工具栏内,窗口的内容区域中有其他内容。NSTextField
是数字显示。)
通常,我只是通过更改stringValue
的“NSTextField
”属性来每秒更新一次计时器,这会导致它自行更新。但是在实时窗口调整大小期间,即使更新“stringValue
”属性的代码正在运行(我已使用NSLog
验证过),NSTextField
也不会再次绘制自己窗口调整大小完成。同时,内容区域内的内容正在自我更新。
我已经尝试了所有我知道的方式来告诉NSTextField
画出自己,但它只是在实时调整大小之前拒绝发生。有任何想法吗?显然,它必须是某种可能的,因为工具栏会随着窗口的其余部分一起调整大小 - 所以你认为可以强制它重绘一个或多个subviews
,因为它正在移动它们周围。我假设我可以通过subclassing
某些来共同攻击这个,但我的Cocoa-fu还不够强大,无法找出最简单/最合适的方法。
提前致谢...
编辑:我有点想出一个解决方案 - 它不是很好,但它现在大部分都有效。这是我在下面的评论。答案 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代码,所以你想在复制之前考虑它。但是你可以毫无顾虑地从中学习实现技术。)