嵌入在NSView中的NSControlls不显示工具提示

时间:2014-04-13 23:55:11

标签: objective-c xcode tooltip nsview nstextfield

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

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

NSTextFields已分配工具提示。这些工具提示未显示,鼠标事件可能被NSView拦截。 有没有办法如何通过nsview或其他方式传递事件如何使ntextfields的工具提示显示?

2 个答案:

答案 0 :(得分:0)

你可能会做一些阻止工具提示的事情,不能没有任何代码。但是,如果标准控件深埋在可能正在处理或吃掉默认工具提示的视图中,这是修复它的最坏情况方法

在自定义视图中

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

并实施

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

答案 1 :(得分:0)

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

[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:方法。检查与工具提示相关的Apple文档,并在Internet上搜索custom "toolTip" "NSView"