【发布时间】:2012-03-11 10:27:31
【问题描述】:
我正在使用 XCode 4.1 在目标 C 中编写一个简单的项目,目标是 MacOS(不是移动设备),并且遇到了以下问题:
我的一个按钮(NSButton,位于股票 NSView 的顶部)在被点击后会间歇性地消失。它不再被绘制,背景显示在它的位置。这不是预期的行为,只会偶尔发生一次(可能是二十次点击中的一次)。特别奇怪的是,按钮仍然处于活动状态——用户可以点击应该显示按钮的空间,然后会采取正确的操作,然后再次绘制按钮。调整窗口大小也会导致再次绘制按钮。
我尝试了以下修复,但均无效:
- 在点击处理结束时添加一个 SetNeedsDisplay 调用。
- 向不相关的动画循环添加 SetNeedsDisplay 调用。这是一个糟糕的选择,导致按钮闪烁,最终导致使用按钮时崩溃。通过一些同步,这可能可以解决问题,但不能解决根本问题。
对正在发生的事情有什么想法,以及我可以如何解决它?谢谢!
编辑:仍然不明白为什么会发生这种情况,但我确实找到了一种解决方法:在消失的按钮正下方创建一个重复按钮。即使未绘制,点击也会定向到顶部按钮。 Kludge 是肯定的,但很有效。
【问题讨论】:
-
是图片按钮吗?你有备用图片吗?它是什么类型的按钮?
-
只是一个标准的 NSButton——不记得我使用的是圆角矩形还是推动。没有与之关联的图像。
-
你说你不以任何方式自定义它 - 只是带有标题的纯标准按钮?你能发布你的点击处理功能吗?
-
也许另一个视图与其重叠,或者某些绘图代码弄乱了剪辑区域并在其上绘制?
-
唯一重叠的视图是包含视图,其中的其他三个按钮保持可见。 (不可见)按钮仍然处理所有点击事件。点击处理有点涉及,并且确实修改了屏幕上其他元素的显示,但没有重叠,所以如果这会导致问题,我会感到惊讶。我在点击处理结束时强制重新显示,但这并不能解决问题。
标签: objective-c macos cocoa user-interface