objective-c - Cocoa:NSButton被点击后消失。但仍然活跃

标签 objective-c macos cocoa user-interface

我正在使用 XCode 4.1 在 Objective C 中编写一个简单的项目,目标是 MacOS(不是移动设备),并且遇到了以下问题:

我的一个按钮(NSButton,位于普通 NSView 之上)在被单击后会间歇性消失。它不再被绘制,并且背景显示在它的位置。这不是预期的行为,并且只会偶尔发生一次(可能是二十次点击中的一次)。特别奇怪的是,按钮仍然处于事件状态——用户可以单击应显示按钮的空间,然后将采取正确的操作并再次绘制按钮。调整窗口大小也会导致再次绘制按钮。

我尝试了以下修复,但均无效:

  1. 在点击处理结束时添加 SetNeedsDisplay 调用。
  2. 向不相关的动画循环添加 SetNeedsDisplay 调用。这是一个糟糕的选择,导致按钮闪烁,最终导致使用按钮时崩溃。通过一些同步,这可能可以解决问题,但不能解决根本问题。

对正在发生的事情以及我如何解决它有什么想法吗?谢谢!

编辑:仍然不太明白为什么会发生这种情况,但我确实找到了一种解决方法:在消失的按钮正下方创建一个重复按钮。即使未绘制,点击也会定向到顶部按钮。拼凑肯定是有效的。

最佳答案

最可能的情况是按钮和它前面的 View 都不在层次结构中,但具有相同的 super View 。如果是这种情况,则绘图行为未定义。

您需要确保该按钮是其所在 View 的子级。在代码中,您可以通过调用 [parentView addSubView:yourButton] 来完成此操作,在界面生成器中,您需要确保将按钮拖动到包含 View 内,而不是旁边。

关于objective-c - Cocoa:NSButton被点击后消失。但仍然活跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654168/

相关文章:

ios - 进度的宽度和高度查看

objective-c - 如何在 NSVisualEffectView 上叠加背景色并使用鲜艳的控件?

python套接字,无效参数

iphone - 这里需要 "atomic"吗?

objective-c - 解析日期字符串给出 [__NSDate length] 无法识别的选择器异常

objective-c - 使用 CGRectZero 初始化 UIView 的框架

ios - 交换方法时找不到选择器

c++ - 我怎样才能从OpenCV的凸缺陷点画出最小的圆

macos - 刷新 Apple 帮助手册缓存

iphone - 在 iPad 中制作网格像素编辑器