当光标在它上面时如何更改NSButton的标题

时间:2012-02-28 13:00:25

标签: macos cocoa events mouse nsbutton

我是Cocoa Programming的初学者。 当光标在按钮上时,如何更改NSButton的标题? (没有点击)。

1 个答案:

答案 0 :(得分:7)

如果你看一下NSButton的类层次结构,你会发现它是从NSResponder派生的,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