4

マウスオーバーイベントで強調表示されたボタンを完了しようとしています。NSButtonそこで、 where is putNSTrackingAreaと Methods - (void)mouseEntered:(NSEvent *)eventand をサブクラス化し- (void)updateTrackingAreasました。

ボタンの作成は次のようになります(ループしているため、配列を使用して収集します):

        CalendarTile *button = [[CalendarTile alloc] init];

        [button setFrame:CGRectMake(point_x, point_y, button_frame_width, button_frame_height)];
        [button setBordered:NO];
        [button setBezelStyle:NSRegularSquareBezelStyle];
        [button setButtonType:NSMomentaryChangeButton];
        [button setFont:[NSFont fontWithName:@"Avenir Next" size:40]];
        [button setAlignment:NSCenterTextAlignment];

        [button setTitle:[NSString stringWithFormat:@"%i", i]];
        [button setTextColor:[NSColor colorWithCalibratedRed:(float)62/255 green:(float)62/255 blue:(float)62/255 alpha:1.0]];

        [arrayWithButtons addObject:button];

        ...

        for (CalendarTile *btn in arrayWithButton) {
        [self addSubview:btn];
        }

これはサブクラスです - CalendarTile.m:

@implementation CalendarTile
- (void)updateTrackingAreas
{
    [super updateTrackingAreas];

    if (trackingArea)
    {
        [self removeTrackingArea:trackingArea];
    }

    NSTrackingAreaOptions options = NSTrackingInVisibleRect | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow;
    trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:options owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
}

- (void)mouseEntered:(NSEvent *)event
{
    [self setImage:[NSImage imageNamed:@"highlight.png"]];
    NSLog(@"HIGHLIGHT");
}

マウスオーバーすると、ログに「HIGHLIGHT」と表示されるはずですが、残念ながらそうではありません。

私たちを手伝ってくれますか?私は何を間違っていますか?

4

2 に答える 2

0

試す

trackingArea = [[NSTrackingArea alloc] initWithRect:NSZeroRect options:options owner:self userInfo:nil];

それ以外の

NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways;
    trackingArea = [[NSTrackingArea alloc] initWithRect:self.frame options:options owner:self userInfo:nil];
于 2012-10-26T09:40:46.100 に答える