3

「画像ベース」のボタンのように動作させたいボーダーレスNSButton(多かれ少なかれアクション付き) があります。つまり、マウスで通過したときとクリックしたときにボタンのテキストの色を変更したいと考えています。NSTextFieldそれを達成する簡単な方法はありますか?

これが私のボタン初期化コンテキストです:

    NSButton* but =[[NSButton alloc] initWithFrame:NSMakeRect(5, 5, 125, 25)] ;
    [but setTitle:@"Do not show Again"];
    [but setButtonType:NSMomentaryLightButton]; //I figure it could be here
    [but setBezelStyle:NSHelpButtonBezelStyle];
    [but setBordered:NO];
    [but setAction:@selector(writeToUserDefaults)];
    [but setFont:[NSFont fontWithName:@"Arial" size:9.0]];
    [self.view addSubview:but];

うまくいかなかったソース: Borderless NSButton Turns Gray

私の解決策は何ですか( NSButton をサブクラス化する以外に?)

4

1 に答える 1

3

解決策は、Apple のドキュメントから NSTrackingArea を使用することです

An NSTrackingArea object defines a region of view that generates mouse-tracking and cursor-update events when the mouse is over that region.

あなたの状況では、NSButton のフレームに対してトラッキング エリアを設定し、マウス トラッキング イベントを受け取ったときにテキストの色を変更する必要があります。

- (void)awakeFromNib:(NSWindow *)newWindow 
{
    NSButton* but =[[NSButton alloc] initWithFrame:NSMakeRect(5, 5, 125, 25)] ;
    [but setTitle:@"Do not show Again"];
    [but setBezelStyle:NSHelpButtonBezelStyle];
    [but setBordered:NO];
    [but setAction:@selector(writeToUserDefaults)];
    [but setFont:[NSFont fontWithName:@"Arial" size:9.0]];
    [self.view addSubview:but];

    NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[but frame] 
                                                                options:(NSTrackingInVisibleRect | NSTrackingEnabledDuringMouseDrag | NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) 
                                                                  owner:self userInfo:nil];

[self.view addTrackingArea:trackingArea];
}

- (void) mouseEntered:(NSEvent*)theEvent {
    //Set text color
}

- (void) mouseExited:(NSEvent*)theEvent {
    //Reset text color
}
于 2013-11-06T02:28:51.303 に答える