2012-04-21 1 views
2

Я реализовал NSButton с изображением в нем.NSButtonCell наведите изображение, прозрачный фон на клик?

Когда пользователь зависает, изображение меняется на что-то еще, а затем обратно.


Нормальный Статус:

enter image description here

На Hover:

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» и прозрачным фоном), когда пользователь нажимает на него, он отображает «белый» фон и не сохраняет мой старый «прозрачный» "background
  • Как мне решить это?
+1

http://stackoverflow.com/questions/7756312/nsbutton-white-background-when-clicked, HTTP : //stackoverflow.com/questions/4801418/nsbuttons-images-lose-transparency-on-selection, будет ли установка типа кнопки «мгновенным изменением» достаточным для вас решением? – Vervious

ответ

8

Вы должны изменить тип кнопки на Кратковременное Изменение. Вы можете изменить его в Attributes инспектора:

how to do it

Или изменить программно:

[button setButtonType:NSMomentaryChangeButton]; 
+0

Я знал, что это было что-то мертвое просто ... Это был один из тех случаев, когда я просто не мог понять, что. Большое спасибо! :-) –

+0

@ Dr.Kameleon Нет проблем, я рад, что помог вам :) –

+0

@JustinBoo: если вы можете мне помочь plzzz .. [Мой вопрос похож на выше] (http://stackoverflow.com/questions/ 16012187/как в настройке-цвет фон, в то время как-выбор-рядный из-nsoutlineview) –

 Смежные вопросы

  • Нет связанных вопросов^_^