我有一个完全自定义的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];
然后将跟踪区域添加到 NSControl 中:
[yourNSControl addTrackingArea:trackingArea];
在你的 NSControl 子类中同时实现
- (void)mouseEntered:(NSEvent *)theEvent
- (void)mouseExited:(NSEvent *)theEvent
在那里,您可以使用控件内的单元格或控件本身执行某些操作。
希望有帮助
关于objective-c - NSControl 和 NSCell : Manage the cell state the right way,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862610/