Если вы посмотрите на иерархию классов для NSButton, вы увидите, что она происходит от NSResponder, который является классом, который обрабатывает события мыши.
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsbutton_Class/Reference/Reference.html
Создайте подкласс NSButton и переопределите следующие сообщения, чтобы установить для заголовка то, что вы хотите:
- (void)mouseEntered:(NSEvent *)theEvent
- (void)mouseExited:(NSEvent *)theEvent
Добавьте это в ваш инициализатор (ЛибоawakeFromNib или ваше сообщение инициализации, в зависимости от вашего использования):
[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES];
Обратите внимание, что даже когда мышь фактически не входила в область отслеживания, в первый раз заголовок будет отображать вышедшее сообщение.Возможно, вы захотите добавить какое-то состояние в ваш класс, если вам нужен третий набор заголовков, прежде чем он войдет в область отслеживания в первый раз.
РЕДАКТИРОВАТЬ: Может быть, это поможет.
ВотЗаголовочный файл "MyButton.h":
#import <Cocoa/Cocoa.h>
@interface MTButton : NSButton {
NSTrackingRectTag myTrackingRectTag;
}
@end
Довольно стандартный материал.
Вот мой исходный файл.
#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