【问题标题】:Cocoa - capturing specific eventsCocoa - 捕捉特定事件
【发布时间】:2012-11-13 06:09:27
【问题描述】:

我是 Cocoa 编程的新手,有一个关于控制事件处理的问题。

我为按钮创建一个“动作”,并获取更新的 AppDelegate.m 来处理此问题。

- (IBAction)seedBtnPressed:(id)sender {
   NSString* myString = @"Hi there";
   [_updateLbl setStringValue:myString];
}

运行此程序时,按下“种子”按钮会执行应有的操作 - 标签更新。 我的问题是:为什么我默认捕获了“按钮按下事件”,因为我没有看到任何我指定的地方。或者,我将如何通过操作捕获鼠标悬停事件?我想我会为按钮创建另一个动作,但不确定如何指定它来仅处理“鼠标悬停”事件?抱歉,如果我在这里使用了 Windows 术语,我知道 Cocoa 对事物使用不同的名称。 谢谢 皮特

【问题讨论】:

    标签: objective-c cocoa events


    【解决方案1】:

    你需要继承 NSButton 类(或者更好的 NSButtonCell 类)。

    - (void)mouseEntered:(NSEvent *)theEvent;
    - (void)mouseExited:(NSEvent *)theEvent;
    

    它们应该在鼠标进入和退出该区域时被调用。您可能还需要重新创建跟踪区域,请看这里:

    - (void)updateTrackingAreas
    

    对于我使用动画师和 alpha 值播放的淡入和淡出效果,例如:

    [[self animator]setAlphaValue:0.5]; 
    

    【讨论】:

    • 感谢 anoop,这很有道理。
    【解决方案2】:

    要获得NSView 的鼠标悬停事件,您应该使用NSTrackingArea 类(假设您的目标是相对现代的OS X 版本)。苹果有很好的文档可以在http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/TrackingAreaObjects/TrackingAreaObjects.html

    对于您关于seedBtnPressed: 触发的其他查询,尽管您没有指定它 - 您是否在 Interface Builder 中为按钮设置了操作而不是通过编程方式?

    【讨论】:

    • 感谢 rickerbh,是的,我在 IB 中为此按钮创建了一个动作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多