NSTableView 文字过长的处理代码
如果在 NSTableView 里需要显示的文字太多,就需要只显示首尾,中间用 …… 代替。代码如下
NSString *setByTrcanateWithAttributeForWidth(NSString *s,NSDictionary *attr,float wid,NSLineBreakMode truncateMode)
{
NSSize textSize = [s sizeWithAttributes:attr];
if(textSize.width <= wid)
{
return s;
}
NSMutableString *currString = [NSMutableString string];
NSRange rangeToCut = {0,0};
if(truncateMode == NSLineBreakByTruncatingTail)
{
rangeToCut.location = [s length] - 1;
rangeToCut.length = 0;
}
else if(truncateMode == NSLineBreakByTruncatingHead)
{
rangeToCut.location = 0;
rangeToCut.length = 1;
}
else
{
rangeToCut.location = [s length]/2;
rangeToCut.length = 2;
}
while (textSize.width > wid)
{
if(truncateMode != NSLineBreakByTruncatingHead && rangeToCut.location <=1)
return @"....";
[currString setString: s];
[currString replaceCharactersInRange:rangeToCut withString:@"...."];
textSize =[currString sizeWithAttributes: attr];
rangeToCut.length++;
if(truncateMode == NSLineBreakByTruncatingTail)
{
rangeToCut.location--;
}
else if((rangeToCut.length && 1) != 1)
{
rangeToCut.location--;
}
else if((rangeToCut.location < 0) || (rangeToCut.location +rangeToCut.length) >[s length])
{
return @"....";
}
}
return currString;
}