如何使NSControl(例如,NSTokenField)忽略鼠标事件

时间:2012-03-26 17:21:28

标签: objective-c macos cocoa nstokenfield nsresponder

具体来说,我想制作NSTokenField忽略鼠标事件,因为我在NSTableCellView中使用它只是为了以标记化方式显示数据而不允许任何编辑。

设置令牌字段的enabled = NO有效,但它会使令牌变灰并使文本难以阅读。

设置令牌字段的editable = NO非常接近我想要的 - 它会在保留令牌字段的外观时阻止编辑 - 除了当我将鼠标放在令牌上时,它们会亮起。如果我可以阻止这种情况,我会做生意。

我怀疑我需要继承某些东西并覆盖一些NSResponder方法,但不太确定该怎么做。我尝试了对NSTokenField进行子类化并覆盖mouseEntered:mouseMoved:什么都不做,但这也不起作用。

1 个答案:

答案 0 :(得分:2)

在尝试了很多东西后,我终于根据IuliusCæsar的建议开始工作了。

诀窍是继承NSTextField并覆盖trackingAreas

- (NSArray *)trackingAreas
{
    return [NSArray array];
}

在创建字段时,只需删除字段的跟踪区域就不够了,因为字段位于滚动视图中,有时会重新创建跟踪区域。