如何使按钮不会点击其中的点击操作?

时间:2011-07-13 16:50:13

标签: objective-c cocoa user-interface nsbutton click-through

Apple人机界面指南state that

  

提供点击的项目是用户只需单击一次即可在非活动窗口上激活的项目,而不是先单击以使窗口处于活动状态,然后单击该项目。点击可以更有效地执行关闭或调整非活动窗口以及复制或移动文件等任务。但是,在许多情况下,点击可能会使无意中点击某个项目的用户感到困惑。

  

不要为以下项目或操作提供点击:

     
      
  • 可能有害并且不允许用户取消它(例如,Mail中的“删除”按钮)
  •   
  • 很难或无法取消(例如邮件中的发送按钮)
  •   
  • 在不告知用户采取了什么操作的情况下解除对话框(例如,“保存”对话框中的“保存”按钮会覆盖现有文件并自动关闭对话框)
  •   
  • 从当前上下文中删除用户(例如,在Finder列中选择新项目可以更改Finder窗口的目标)
  •   

我想要做的是,如果用户点击特定按钮,除非窗口处于活动状态(例如,Mail中的删除消息按钮),否则它不会发送消息。我怎样才能做到这一点?如果我需要继承NSButton,那很好。

1 个答案:

答案 0 :(得分:1)

查看NSView文档:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/occ/instm/NSView/acceptsFirstMouse

您需要覆盖acceptsFirstMouse才能将TRUE返回到启用点击。

默认行为不是点击型:

  

默认实现忽略了事件并返回NO。

您可能已经在代码中或在基于代码的代码中覆盖了此方法。尝试删除代码中acceptsFirstMouse的实现。