0

我对 Cocoa 编程相当陌生,并且对控制事件处理有疑问。

我为一个按钮创建了一个“动作”,并获得了一个更新的 AppDelegate.m 来处理这个,例如。

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

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

4

2 回答 2

1

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

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

于 2012-11-13T07:01:37.437 回答
1

您需要子类化 NSButton 类(甚至更好的 NSButtonCell 类)。

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

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

- (void)updateTrackingAreas

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

[[self animator]setAlphaValue:0.5]; 
于 2012-11-13T07:02:01.880 回答