我有一个基于单元格的NSTableView
,我正在使用标准NSTableViewDelegate
方法为行设置工具提示:
- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex mouseLocation:(NSPoint)mouseLocation
{
if (aTableView == scriptBlocksTableView)
{
std::vector<SLiMEidosBlock*> &scriptBlocks = sim->script_blocks_;
int scriptBlockCount = (int)scriptBlocks.size();
if (rowIndex < scriptBlockCount)
{
SLiMEidosBlock *scriptBlock = scriptBlocks[rowIndex];
const char *script_string = scriptBlock->compound_statement_node_->token_->token_string_.c_str();
NSString *ns_script_string = [NSString stringWithUTF8String:script_string];
// change whitespace to non-breaking spaces; we want to force AppKit not to wrap code
ns_script_string = [ns_script_string stringByReplacingOccurrencesOfString:@" " withString:@" "]; // second string is an
ns_script_string = [ns_script_string stringByReplacingOccurrencesOfString:@"\t" withString:@" "]; // second string is three s
return ns_script_string;
}
}
return nil;
}
这是Objective-C ++代码,但事实并非如此。我想要显示的工具提示是一小段代码。我希望它以小的等宽字体显示(摩纳哥9?),我希望这些线不要包装。正如你所看到的,我在这里用不间断的空格替换空格和制表符以试图阻止换行,这是有效的,但只能达到一定程度。如果一条线太长,即使没有有效的包裹点,AppKit也会强行换行;它只是强制执行最大工具提示宽度,无论如何。
我找不到任何方法来改变工具提示的字体/大小,或强迫它们不要换行。我确实找到了this ancient article关于影响工具提示的默认值;我甚至没有尝试过这些,因为应用程序范围的默认值是不可接受的(因为我的应用程序有其他工具提示,我想要正常运行)。本文确实建议在AppKit中引入所需的机器;我只需要一个API。
我怀疑答案是“抱歉,你运气不好”。在那种情况下,有没有人有任何好的自定义工具提示显示代码,可能是使用弹出窗口或无边框窗口或其他一些,他们愿意分享?理想情况下,它会模仿标准Cocoa工具提示的外观和行为,但添加了这种可配置性。或者有人有替代解决方案吗?