1.制作富文本,第一种的就是将一段文字中不通的字显示不同的颜色,大小等。
- UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)];
-
- testLabel.textAlignment = NSTextAlignmentCenter;
-
- NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"];
-
- [AttributedStr addAttribute:NSFontAttributeName
-
- value:[UIFont systemFontOfSize:16.0]
-
- range:NSMakeRange(2, 2)];
-
- [AttributedStr addAttribute:NSForegroundColorAttributeName
-
- value:[UIColor redColor]
-
- range:NSMakeRange(2, 2)];
-
- testLabel.attributedText = AttributedStr;
-
- [self.view addSubview:testLabel];
2.制作富文本,第二种就是将图片和文字混排
- UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, 300, 21)];
- lable.textColor = [UIColor redColor];
- [self.view addSubview:lable];
-
-
- NSString *message = @"我是郝高明,外号小胖,哈哈~";
- NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:message attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];
-
- NSTextAttachment *attachment = [[NSTextAttachment alloc]initWithData:nil ofType:nil];
- UIImage *image = [UIImage imageNamed:@"80.png"];
- attachment.image = image;
- attachment.bounds = CGRectMake(0, 0, 20, 20);
-
- NSAttributedString *text = [NSAttributedString attributedStringWithAttachment:attachment];
- [str insertAttributedString:text atIndex:5];
-
- lable.attributedText = str;
3.制作富文本,你可能会有一些定制的需求,比如图片的高度不想每个都要设置一边,你可以写一个继承,然后将
- -(CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex
重写。
-
-
-
-
-
-
-
-
- #import <UIKit/UIKit.h>
-
- @interface myTextAttachment : NSTextAttachment
-
- @end
-
-
-
-
-
-
-
-
- #import "myTextAttachment.h"
-
- @implementation myTextAttachment
-
- -(CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex
- {
- return CGRectMake( 0 , 0 , lineFrag.size.height , lineFrag.size.height);
- }
- @end
然后呢,程序这样写:
- UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, 300, 21)];
- lable.textColor = [UIColor redColor];
- [self.view addSubview:lable];
-
-
- NSString *message = @"我是郝高明,外号小胖,哈哈~";
- NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:message attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];
-
- myTextAttachment *attachment = [[myTextAttachment alloc]init];
-
- UIImage *image = [UIImage imageNamed:@"80.png"];
- attachment.image = image;
-
-
- NSAttributedString *text = [NSAttributedString attributedStringWithAttachment:attachment];
- [str insertAttributedString:text atIndex:5];
-
- lable.attributedText = str;
4.制作富文本,可能你需要替换掉一段文字中得特殊字符,比如:
- NSString *message = @"我是郝高明[icon],外号小胖,哈哈~";
把这段话的[icon]替换成一个图片,那么这个应该怎么做呢?我们就用到了这个函数
- - (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;
这是一个替换函数,怎么用呢?
- UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 150, 300, 21)];
- lable.textColor = [UIColor redColor];
- [self.view addSubview:lable];
-
-
- NSString *message = @"我是郝高明[icon],外号小胖,哈哈~";
- NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:message attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];
-
- myTextAttachment *attachment = [[myTextAttachment alloc]init];
- UIImage *image = [UIImage imageNamed:@"80.png"];
- attachment.image = image;
-
- NSAttributedString *text = [NSAttributedString attributedStringWithAttachment:attachment];
- NSRange range = [[str string]rangeOfString:@"[icon]"];
- [str replaceCharactersInRange:range withAttributedString:text];
-
- lable.attributedText = str;
效果和上图的效果是一样的。
补充一点知识:
1.为某一范围内文字设置多个属性
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;
为某一范围内文字添加某个属性
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
为某一范围内文字添加多个属性
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
移除某范围内的某个属性
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
2. 常见的属性及说明
NSFontAttributeName 字体
NSParagraphStyleAttributeName 段落格式
NSForegroundColorAttributeName 字体颜色
NSBackgroundColorAttributeName 背景颜色
NSStrikethroughStyleAttributeName删除线格式
NSUnderlineStyleAttributeName 下划线格式
NSStrokeColorAttributeName 删除线颜色
NSStrokeWidthAttributeName删除线宽度
NSShadowAttributeName 阴影
更多方法和属性说明详见苹果官方说明文档:
链接地址
源码下载:http://download.youkuaiyun.com/detail/haogaoming123/8784033