3

画像を含む NSButton を実装しました。

ユーザーがカーソルを合わせると、画像が別のものに変わり、元に戻ります。


正常な状態:

ここに画像の説明を入力

ホバー時:

ここに画像の説明を入力


私が使用しているコードは次の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" 丸みを帯びた画像と透明な背景)、ユーザーがクリックすると、"白" っぽい背景が表示され、古い "透明な" 背景は保持されません。
  • これを解決するにはどうすればよいですか?
4

2 に答える 2

8

ボタンのタイプをMomentary Changeに変更する必要があります。属性インスペクターで変更できます。

どうやってするの

またはプログラムで変更します。

[button setButtonType:NSMomentaryChangeButton];
于 2012-04-21T20:10:58.857 に答える