iOS基础·OC语法篇

iOS更改字符串中特定字符大小

2016-05-20  本文已影响1936人  乌拉大王

最近写项目,其中一个控件需要展示从后台请求来的数据,并做相应的大小更改。

后台请求得来的字符串:

NSString *str1 = @"12.00~13.00%";

NSString *str2 = @"14.00~15.00%";

NSString *str3 = @"16.00%";

需要显示为图1样式

(图1)

当数据格式固定,数字稳定在两位数之间,基本的字符串操作就可以达到想要的效果:

NSString *numStr = @"12.00~13.00%";

NSString *numStr1 = [numStr stringByReplacingOccurrencesOfString:@".00" withString:@""];

NSString *numStr2 = [numStr1 stringByReplacingOccurrencesOfString:@"~" withString:@"% - "];

NSMutableAttributedString *numText=[[NSMutableAttributedString alloc]initWithString:numStr2 attributes:nil];

这样简单根据“%”字符的index,可以通过计算给“%”设置font值:

[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(2, 1)];

[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(8, 1)];

// UILabel *circleivNumlab;

circleNumlable.attributedText= numText;

但是一旦请求得来的数字变化为个位数,如7.5%时,下标发生变化,这样的计算方法就会出问题了。

因此,经过重新思考,得来新的方法:

NSRange range1=NSMakeRange([self getSubStrNumFromStr:numText WithLocation:YES], 1);

NSRange range2=NSMakeRange(numText.length-1, 1);

[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(range1, 1)];

[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(range2, 1)];

// UILabel *circleivNumlab;

circleNumlable.attributedText= numText;

- (NSInteger)getSubStrNumFromStr:(NSString *)str WithLocation:(BOOL)first

{

if (str.length>0) {

NSArray *nums=[str componentsSeparatedByString:@"% - "];

if (first && nums.count>0) {

return [[nums firstObject] length];

}else if (first==NO && nums.count==2){

return  [[[[nums lastObject] componentsSeparatedByString:@"%"]firstObject]length];

}

}

return 0;

}

这样通过重新分割字符串,得到“%”的位置,不论传入的数字是一位数还是两位数,一键搞定!

上一篇下一篇

猜你喜欢

热点阅读