防止可怕的宽NSBrowserCell工具提示

时间:2012-07-31 12:40:01

标签: objective-c cocoa nsbrowser

我正在使用以下代码设置NSBrowser矩阵单元格的工具提示:

- (void) browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(int)row column:(int)column  {  
    NSMatrix *matrix = [sender matrixInColumn:column];
    NSLog(@"'%@'", [cell title]);
    [matrix setToolTip:[cell title] forCell:[matrix cellAtRow:row column:column]];    
}

在大多数情况下,这会产生很棒的工具提示。

然而,当悬停一些细胞时,工具尖端会扩展到怪诞的宽度,将令人愉快的体验转变为令人讨厌的体验。下面的截图显示了这种可怕的行为。

Wide load

触发上图所示的令人发指的工具提示的单元格的输出是:

'gnome-1.1-tb-linux.jar'

什么可能导致这些看似随机的暴行 - 我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下对我有用的解决方案是在我的- (NSRect)expansionFrameWithFrame:(NSRect)cellFrame inView:(NSView *)view子类中实现NSBrowserCell,如下所示:

- (NSRect)expansionFrameWithFrame:(NSRect)cellFrame inView:(NSView *)view {
    NSSize size = [self.tooltipText sizeWithAttributes:@{
                       NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]
                   }];
    // Expansion frame displays below and indented to the right in relation to the cellFrame
    NSRect rect = NSMakeRect(cellFrame.origin.x + 10, cellFrame.origin.y + size.height, size.width, size.height);
    return rect;
}