我有一个完全自定义的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/