目标c-NSView中嵌入的NSControll不显示工具提示



我在自定义视图中嵌入了多个NSTextFields和其他控件:

Custom View
- Image View
- Custom View
-- Text Field
-- Text Field
.
.
.
- Custom View
-- Text Field
-- Text Field
.
.
.

NSTextFields已分配工具提示。这些工具提示没有显示,鼠标事件可能被NSView截获。有没有任何方法可以通过nsview传递事件,或者其他方法可以显示ntextfields的工具提示?

如果您有一个包含多个NSTextFieldNSBox *box,请发出此命令,其中包括首先绑定或以其他方式设置您的方框视图的工具提示,然后将工具提示矩形指定为方框视图的框架,并将其发送到方框视图:

[box bind:@"toolTip" toObject:myNSObjectControllerInstance withKeyPath:@"selection.something which is.my.box.tooltip.info.property.key.path" options:nil];
[box addToolTipRect:box.frame owner:box userData:NULL];

将鼠标悬停在框内的文本字段上,将显示文本字段的工具提示。将鼠标光标悬停在方框上将显示方框的工具提示。。。除非您的鼠标光标也在该框视图的嵌套子视图的内部(我猜是框架),因此当前工具提示级别已经嵌套在该框的视图层次结构中:

使用工具提示的正常行为是只向内遍历嵌入视图,而不是向外返回到超级视图这可能是您的问题,因为默认情况下,必须先将鼠标移到视图外部,然后再移回视图内部,才能查看该视图层次级别的工具提示——一旦鼠标悬停在嵌套视图上,即使该嵌套视图没有工具提示,只有将鼠标光标移到超级视图之外并返回到超级视图中,而不输入其任何子视图,嵌套视图的超级视图的工具提示才会显示。请注意,在工具提示消失后,工具提示的嵌套索引不会重置。

也许您可以用NSView的一个子类自定义它,该子类有自己的addToolTipRect:owner:userData:方法。查看与工具提示相关的苹果文档,并在互联网上搜索custom "toolTip" "NSView"

您可能正在做一些事情来阻止工具提示,如果没有任何代码,就不能说。但如果标准控件被深深地隐藏在视图中,可能会处理或吃掉默认的工具提示,那么这里有一种最糟糕的方法来修复它

在您的自定义视图中

[textField addToolTipRect:textField.frame owner:self userData:NULL];

并实现

-(NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data
{
    return textField.tooltip;
}

最新更新