【问题标题】:Cocoa: NSButton disappears after being clicked. Still active howeverCocoa:NSButton 被点击后消失。然而仍然活跃
【发布时间】:2012-03-11 10:27:31
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 是图片按钮吗?你有备用图片吗?它是什么类型的按钮?
  • 只是一个标准的 NSButton——不记得我使用的是圆角矩形还是推动。没有与之关联的图像。
  • 你说你不以任何方式自定义它 - 只是带有标题的纯标准按钮?你能发布你的点击处理功能吗?
  • 也许另一个视图与其重叠,或者某些绘图代码弄乱了剪辑区域并在其上绘制?
  • 唯一重叠的视图是包含视图,其中的其他三个按钮保持可见。 (不可见)按钮仍然处理所有点击事件。点击处理有点涉及,并且确实修改了屏幕上其他元素的显示,但没有重叠,所以如果这会导致问题,我会感到惊讶。我在点击处理结束时强制重新显示,但这并不能解决问题。

标签: objective-c macos cocoa user-interface


【解决方案1】:

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

您需要确保该按钮是其前面的视图的子级。在代码中,您可以通过调用 [parentView addSubView:yourButton] 来执行此操作,而在界面构建器中,您需要确保将按钮拖到包含视图内,而不是在它旁边。

【讨论】:

  • 感谢您的信息!不知道那个。不过,在这种情况下似乎并非如此。我没有重叠的兄弟视图——按钮位于层次结构的底部。
  • 你能把 nib 文件发到网上吗?
猜你喜欢
  • 2023-04-07
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
相关资源
最近更新 更多