如果你看一下NSButton的类层次结构,你会发现它是从NSResponder派生的,NSResponder是处理鼠标事件的类.
创建NSButton的子类并覆盖以下消息以将标题设置为您想要的内容:
- (void)mouseEntered:(NSEvent *)theEvent
- (void)mouseExited:(NSEvent *)theEvent
Run Code Online (Sandbox Code Playgroud)
将其添加到初始化程序(awakeFromNib或init消息,具体取决于您的使用情况):
[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES];
Run Code Online (Sandbox Code Playgroud)
请注意,即使鼠标实际上没有进入跟踪区域,标题也会第一次显示已退出的消息.如果您想在第一次进入跟踪区域之前设置第三个标题,则可能需要向类添加一些状态.
编辑:也许这会有所帮助.
这是头文件"MyButton.h":
#import <Cocoa/Cocoa.h>
@interface MTButton : NSButton {
NSTrackingRectTag myTrackingRectTag;
}
@end
Run Code Online (Sandbox Code Playgroud)
很标准的东西.
这是我的源文件.
#import "myButton.h"
@implementation MTButton
- (void) awakeFromNib
{
[self setTitle:@"Initial"];
myTrackingRectTag = [self addTrackingRect:[self bounds]
owner:self
userData:NULL
assumeInside:YES];
}
- (void) dealloc
{
[super dealloc];
[self removeTrackingRect:myTrackingRectTag];
}
- (void)mouseEntered:(NSEvent *)theEvent
{
[super mouseEntered:theEvent];
[self setTitle:@"Entered"];
}
- (void)mouseExited:(NSEvent *)theEvent
{
[super mouseExited:theEvent];
[self setTitle:@"Exited"];
}
@end
Run Code Online (Sandbox Code Playgroud)