首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSControl和NSCell:以正确的方式管理单元状态

NSControl和NSCell:以正确的方式管理单元状态
EN

Stack Overflow用户
提问于 2012-12-13 23:03:10
回答 1查看 910关注 0票数 1

我有一个完全自定义的NSCell的完全自定义的NSControl。现在我想实现一些鼠标交互。例如,当用户单击控件时,我希望将控件状态更改为highlight,因此问题是:

1)我必须在哪里处理鼠标事件?在NSControl中还是直接在NSCell中?

目前,我在NSCell子类中使用以下代码:

代码语言:javascript
复制
-(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中写了这段代码

代码语言:javascript
复制
-(void)setEnabled:(BOOL)flag{
    [super setEnabled:flag];
    [[self cell]setEnabled:flag];
    [self updateCell:[self cell]];
}

对于使用自定义NSControl+NSCell处理鼠标事件,您有什么特别的建议吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-13 23:58:56

您可以执行以下操作:

创建一个NSTrackingArea,它将检测鼠标是否进入您的NSControl:

代码语言:javascript
复制
NSTrackingArea* trackingArea = [[[NSTrackingArea alloc] initWithRect:yourNSControlBoundsRect options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:yourNSControl userInfo:nil];

然后将trackingArea添加到NSControl中:

代码语言:javascript
复制
[yourNSControl addTrackingArea:trackingArea];

在您NSControl子类中实现这两个

代码语言:javascript
复制
 - (void)mouseEntered:(NSEvent *)theEvent
 - (void)mouseExited:(NSEvent *)theEvent

在那里,您可以使用控件内部的单元格或控件本身执行某些操作。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13862610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档