gpt4 book ai didi

objective-c - NSControl 和 NSCell : Manage the cell state the right way

转载 作者:行者123 更新时间:2023-12-03 17:23:35 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com