我正在使用 XCode 4.1 在 Objective C 中编写一个简单的项目,目标是 MacOS(不是移动设备),并且遇到了以下问题:
我的一个按钮(NSButton,位于普通 NSView 之上)在被单击后会间歇性消失。它不再被绘制,并且背景显示在它的位置。这不是预期的行为,并且只会偶尔发生一次(可能是二十次点击中的一次)。特别奇怪的是,按钮仍然处于事件状态——用户可以单击应显示按钮的空间,然后将采取正确的操作并再次绘制按钮。调整窗口大小也会导致再次绘制按钮。
我尝试了以下修复,但均无效:
- 在点击处理结束时添加 SetNeedsDisplay 调用。
- 向不相关的动画循环添加 SetNeedsDisplay 调用。这是一个糟糕的选择,导致按钮闪烁,最终导致使用按钮时崩溃。通过一些同步,这可能可以解决问题,但不能解决根本问题。
对正在发生的事情以及我如何解决它有什么想法吗?谢谢!
编辑:仍然不太明白为什么会发生这种情况,但我确实找到了一种解决方法:在消失的按钮正下方创建一个重复按钮。即使未绘制,点击也会定向到顶部按钮。拼凑肯定是有效的。
最佳答案
最可能的情况是按钮和它前面的 View 都不在层次结构中,但具有相同的 super View 。如果是这种情况,则绘图行为未定义。
您需要确保该按钮是其所在 View 的子级。在代码中,您可以通过调用 [parentView addSubView:yourButton]
来完成此操作,在界面生成器中,您需要确保将按钮拖动到包含 View 内,而不是旁边。
关于objective-c - Cocoa:NSButton被点击后消失。但仍然活跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654168/