有时候产品经理说,能把一句话显示多种颜色、多种字体吗? 灵光一闪,弄多个UILabel来显示不就行了,我只能说可以,也只能说这法有点笨。于是我坚决不用这种方法,苦思冥想,终于有了眉目。先配张图来显摆显摆,其实很容易实现,我也就不啰嗦了,看招:
由于很简单,不喜请喷我。
ok, 上代码,一看也就是一个方法:
-(void)txtArr:(NSArray *)txtArr colorArr:(NSArray *)colorArr fontArr:(NSArray *)fontArr {
NSInteger okCount = 0;
okCount = txtArr.count < colorArr.count ? txtArr.count : colorArr.count;
okCount = okCount < fontArr.count ? okCount : fontArr.count;
NSMutableString *txt = [NSMutableString string];
for (NSString *str in txtArr) {
[txt appendString:str];
}
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:txt];
NSInteger startLoc = 0;
for (int i = 0; i < okCount; i++) {
[str addAttributes:@{NSForegroundColorAttributeName:colorArr[i], NSFontAttributeName:[UIFont systemFontOfSize:[fontArr[i] integerValue]]} range:NSMakeRange(startLoc, [txtArr[i] length])];
startLoc += [txtArr[i] length];
}
self.attributedText = str;
}
参数说明基本都是见明知意(大人,请允许我自恋吧)
- txtArr: 传入的文本数组(对象是字符串)
- colorArr: 颜色数组 (对象是UIColor)
- fontArr: 字体数组 (对象是字符串如:@“18” 号字体)
使用方法,写给新手哦,老手请过滤吧,不然你又该喷我了
我还是以代码使用为主
NSArray *a = [NSArray arrayWithObjects:@"瞅啥瞅", @"我不就是", @"多样式label么,哈哈", nil];
NSArray *b = [NSArray arrayWithObjects:[UIColor redColor], [UIColor blackColor], [UIColor blueColor], nil];
NSArray *c = [NSArray arrayWithObjects:@"19", @"13", @"17", nil];
[self.multiLabel txtArr:a colorArr:b fontArr:c];
哎,对了,我将此方法写成了UILabel的分类了,所以这么使用没什么不妥;至于分类,不懂得,去google吧,没翻墙的还是百度吧;