您的位置:首页 > 编程语言

NSTableView 文字过长的处理代码

2012-11-15 18:08 162 查看
如果在 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: