我有一个完全自定义的NSCell的完全自定义的NSControl。现在我想实现一些鼠标交互。例如,当用户单击控件时,我希望将控件状态更改为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处理鼠标事件,您有什么特别的建议吗?
发布于 2012-12-13 23:58:56
您可以执行以下操作:
创建一个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在那里,您可以使用控件内部的单元格或控件本身执行某些操作。
希望这能有所帮助
https://stackoverflow.com/questions/13862610
复制相似问题