向视图添加许多工具提示时出现问题

时间:2011-05-20 19:44:47

标签: objective-c cocoa macos nsview tooltip

我的Cocoa应用程序有一个视图,显示大约五十个彩色矩形,表示一些数据的热图。我无法弄清楚如何向每个矩形添加工具提示,显示有关该矩形所代表的数据的信息。我查看了NSView的开发人员文档,并添加了以下代码:

- (NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:(void *)data
{

    // use the tags to determine which rectangle is under the mouse
    if (tag == blueTag) {
        return NSLocalizedString(@"The Blue rectangle", @"");
    }
    if (tag == redTag) {
        return NSLocalizedString(@"The Blue rectangle", @"");    
    }
    // we should never get to here!
    return NSLocalizedString(@"Unknown tooltip area", @"");
}

// add tooltips for the rectangles (in my  drawRect method 
// after the rects have been initialized etc.)
[self removeAllToolTips];
redTag = [self addToolTipRect:startingRect owner:self userData:NULL];
blueTag = [self addToolTipRect:blueRect owner:self userData:NULL];

我遇到两个问题:
1)当我打印出工具提示的标签时,它们都显示1作为标签,即使它们是两个不同的矩形。
2)永远不会调用stringForToolTip方法

任何帮助/建议都会很棒。谢谢!

1 个答案:

答案 0 :(得分:2)

我认为主要问题是你在-drawRect:添加了工具提示。如果调整视图大小,则只需更新工具提示,而不是每次绘制时都更新。相反,添加一个方法来配置工具提示,然后从视图的-init方法中调用它。

然后,您可以在调用-setFrame:后覆盖[super setFrame:newFrame]并调用工具提示配置方法。

我应该指出,在你的代码中,两个矩形都会输出The Blue rectangle,因为日志字符串是相同的......