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;
}
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;
}
相关文章推荐
- NSTableView 文字过长的处理代码
- 如何处理CLOB字段值超过4000字节时提示:“ORA-01704:文字字符串过长”的错误
- iPhone 处理tableview里面要显示的过长的文字
- 处理jsp显示文字过长问题的解决方法
- 我的java思想010:对于频繁变动的事件,在事件处理的代码中,代码不能过长,不能包含太多的操作
- 如何处理CLOB字段值超过4000字节时提示:“ORA-01704:文字字符串过长”的错误
- mysql安装后,错误提示只有代码没有文字信息处理
- (转载)最实用的清除浮动代码 css的文字过长裁剪后面跟着省略号
- 控件文字过长的显示处理
- 处理文字过长显示超出解决方案(纯css解决)
- Java图片处理 (文字水印、图片水印、缩放、补白)代码实例
- 循环双击文字出现编辑文本框的JS代码(csdn 自己回贴处理的JS)
- FOR 新手:一段Text Helper代码,用于文字处理:去掉HTML标记,以及字符串相减
- WPF textBox中简单处理文字滚动显示问题,另外用代码去边框
- 处理jsp显示文字过长问题
- Fragment中的Toolbar使用与处理,以及toobar在Java代码实现添加logo图片和文字
- cache和session配合实现单点登录的关键代码以及对session存在时间过长的处理
- IOS UILabel 文字过长处理
- 处理jsp显示文字过长问题的解决方法