2012-04-21 4 views
2

NSButton에 이미지가있는 NSButton을 구현했습니다.NSButtonCell 마우스 오버시 이미지, 투명한 배경?

사용자가 안내하면 이미지가 다른 것으로 변경된 다음 다시 켜집니다.


정상 상태 : 호버에

enter image description here

:

enter image description here


나는 NSButtonCell을 위해 사용하고 코드는 다음과 같습니다

인터페이스 :

#import <Foundation/Foundation.h> 

@interface DKHoverButtonCell : NSButtonCell 
{ 
    NSImage *_oldImage; 
    NSImage *hoverImage; 
} 

@property (retain) NSImage *hoverImage; 

@end 

구현 :

:

#import "DKHoverButtonCell.h" 

@interface NSButtonCell() 
- (void)_updateMouseTracking; 
@end 

@implementation DKHoverButtonCell 

@synthesize hoverImage; 

- (void)mouseEntered:(NSEvent *)event { 
    if (hoverImage != nil && [hoverImage isValid]) { 
     _oldImage = [[(NSButton *)[self controlView] image] retain]; 
     [(NSButton *)[self controlView] setImage:hoverImage]; 
    } 
} 

- (void)mouseExited:(NSEvent *)event { 
    if (_oldImage != nil && [_oldImage isValid]) { 
     [(NSButton *)[self controlView] setImage:_oldImage]; 
     [_oldImage release]; 
     _oldImage = nil; 
    } 
} 

- (void)_updateMouseTracking { 
    [super _updateMouseTracking]; 
    if ([self controlView] != nil && [[self controlView] respondsToSelector:@selector(_setMouseTrackingForCell:)]) { 
     [[self controlView] performSelector:@selector(_setMouseTrackingForCell:) withObject:self]; 
    } 
} 

- (void)setHoverImage:(NSImage *)newImage { 
    [newImage retain]; 
    [hoverImage release]; 
    hoverImage = newImage; 
    [[self controlView] setNeedsDisplay:YES]; 
} 

- (void)dealloc { 
    [_oldImage release]; 
    [hoverImage release]; 
    [super dealloc]; 
} 

@end 
이제

, 여기에 문제가

  • 위의 컨트롤은 100 % 효과가 있지만 ("X"반올림 이미지 및 투명 배경 사용) 사용자가 클릭하면 "흰색"- 배경이 보이고 이전의 "투명 "배경
  • 어떻게 해결해야합니까?
+1

http://stackoverflow.com/questions/7756312/nsbutton-white-background-when-clicked, HTTP를 : //stackoverflow.com/questions/4801418/nsbuttons-images-lose-transparency-on-selection, 버튼 셀 유형을 "순간 변경"으로 설정하면 충분한 해결책이 될 수 있습니까? – Vervious

답변

8

당신은 순간 변경에 버튼의 유형을 변경해야합니다.

how to do it

또는 프로그래밍 방식으로 변경 : 당신은 속성 관리자에서 변경할 수 있습니다

[button setButtonType:NSMomentaryChangeButton]; 
+0

나는 그것이 죽은 단순한 무언가라는 것을 알고 있었다 ... 나는 단지 그걸 알아낼 수 없었던 그 중 하나였다. 고마워요! :-) –

+0

@ Dr.Kameleon 아무런 문제도 없지만, 나는 당신을 도왔다 고 기뻐요. –

+0

@JustinBoo : 저를 도와 주시면 plzzz .. [위 질문과 비슷한 질문] (http://stackoverflow.com/questions/) 16012187/how-to-set-background-color-while-select-row-of-nsoutlineview) –

관련 문제