2012-02-28 4 views

답변

7

NSButton의 클래스 계층 구조를 보면 마우스 이벤트를 처리하는 클래스 인 NSResponder에서 파생 된 것을 볼 수 있습니다.

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsbutton_Class/Reference/Reference.html

NSButton의 서브 클래스를 작성하고 당신이 원하는에 제목을 설정하려면 다음과 같은 메시지를 오버라이드 (override) :

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

, 당신의 초기화 (어느로 awakeFromNib 또는 초기화 메시지에이 추가에 따라 당신의 사용법) :

[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES]; 

비록 실제로 마우스가 처음으로 트랙킹 영역에 들어 가지 않았을지라도 나간 메시지를 잘못 표시합니다. 처음으로 추적 영역에 들어가기 전에 세 번째 제목 세트를 원하면 클래스에 상태를 추가 할 수 있습니다.

편집 : 아마도 도움이 될 것입니다.

#import <Cocoa/Cocoa.h> 

@interface MTButton : NSButton { 
    NSTrackingRectTag myTrackingRectTag; 
} 

@end 

예쁜 표준 재료 : 여기

헤더 파일 "MyButton.h"입니다.

다음은 내 소스 파일입니다.

#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 
+0

오, 당신이 말하는 것을 이해하는 데 오랜 시간이 걸립니다. 열심히 노력할 것입니다. 조언 해 주셔서 감사합니다! – user1225834

관련 문제