1

我有一个完全定制NSControl的完全定制NSCell。现在我想实现一些鼠标交互。例如,当用户单击控件时,我想将控件状态更改为,highlight所以问题是:

1)我必须在哪里处理鼠标事件?在中NSControl还是直接在中NSCell

目前我正在使用 NSCell 子类中的代码:

-(BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView{
    [self setHighlighted:YES];

    return YES;
}

-(void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag{
    [self setHighlighted:NO];
}

2)NSCell状态是否由 ? 自动管理NSControl?如果我将NSControlstete 设置为highlight它将被镜像到NSCell?

3)那启用的属性呢?目前我在 NSControl 中写了这段代码: 而在 NSControl 中的这段代码

-(void)setEnabled:(BOOL)flag{
    [super setEnabled:flag];
    [[self cell]setEnabled:flag];
    [self updateCell:[self cell]];
}

您是否特别建议使用自定义 NSControl+NSCell 处理鼠标事件?

4

1 回答 1

0

您可以执行以下操作:

创建一个 NSTrackingArea,它将检测鼠标是否进入您的 NSControl:

NSTrackingArea* trackingArea = [[[NSTrackingArea alloc] initWithRect:yourNSControlBoundsRect options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:yourNSControl userInfo:nil];

然后将 trackingArea 添加到 NSControl:

[yourNSControl addTrackingArea:trackingArea];

在您的 NSControl 子类中同时实现

 - (void)mouseEntered:(NSEvent *)theEvent
 - (void)mouseExited:(NSEvent *)theEvent

在那里,您可以对控件中的单元格或控件本身执行某些操作。

希望有帮助

于 2012-12-13T15:58:55.977 回答