我有一个完全自定义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的鼠标事件?
答案 0 :(得分: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
在那里,你可以在你的控制范围内或你的控制本身对你的细胞做些什么。
希望有所帮助