我有一个完全自定义的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自动管理?如果将NSControl stete设置为highlight,它将镜像到NSCell吗?

3)以及启用的属性如何?
目前,我在NSControl中编写了以下代码:
而这段代码在NSControl中

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


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

最佳答案

您可以执行以下操作:

创建一个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


在那里,您可以对控件内部的单元格或控件本身进行操作。

希望能有所帮助

关于objective-c - NSControl和NSCell:以正确的方式管理单元状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13862610/

10-15 14:19