NSTextAttachment富文本控件实现图文混排

1.制作富文本,第一种的就是将一段文字中不通的字显示不同的颜色,大小等。

[objc]  view plain copy
  1. UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(010032030)];  
  2.   
  3.    testLabel.textAlignment = NSTextAlignmentCenter;  
  4.   
  5.    NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"];  
  6.   
  7.    [AttributedStr addAttribute:NSFontAttributeName  
  8.   
  9.                          value:[UIFont systemFontOfSize:16.0]  
  10.   
  11.                          range:NSMakeRange(22)];  
  12.   
  13.    [AttributedStr addAttribute:NSForegroundColorAttributeName  
  14.   
  15.                          value:[UIColor redColor]  
  16.   
  17.                          range:NSMakeRange(22)];  
  18.   
  19.    testLabel.attributedText = AttributedStr;  
  20.   
  21.    [self.view addSubview:testLabel];  
2.制作富文本,第二种就是将图片和文字混排

[objc]  view plain copy
  1. UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(015030021)];  
  2.     lable.textColor = [UIColor redColor];  
  3.     [self.view addSubview:lable];  
  4.       
  5.     //富文本  
  6.     NSString *message = @"我是郝高明,外号小胖,哈哈~";  
  7.     NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:message attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];  
  8.       
  9.     NSTextAttachment *attachment = [[NSTextAttachment alloc]initWithData:nil ofType:nil];  
  10.     UIImage *image = [UIImage imageNamed:@"80.png"];  
  11.     attachment.image = image;  
  12.     attachment.bounds = CGRectMake(002020);  
  13.       
  14.     NSAttributedString *text = [NSAttributedString attributedStringWithAttachment:attachment];  
  15.     [str insertAttributedString:text atIndex:5];  
  16.       
  17.     lable.attributedText = str;  

3.制作富文本,你可能会有一些定制的需求,比如图片的高度不想每个都要设置一边,你可以写一个继承,然后将
[objc]  view plain copy
  1. -(CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex  
重写。

[objc]  view plain copy
  1. //  
  2. //  myTextAttachment.h  
  3. //  11  
  4. //  
  5. //  Created by 郝高明 on 15/6/8.  
  6. //  Copyright (c) 2015年 郝高明. All rights reserved.  
  7. //  
  8.   
  9. #import   
  10.   
  11. @interface myTextAttachment : NSTextAttachment  
  12.   
  13. @end  

[objc]  view plain copy
  1. //  
  2. //  myTextAttachment.m  
  3. //  11  
  4. //  
  5. //  Created by 郝高明 on 15/6/8.  
  6. //  Copyright (c) 2015年 郝高明. All rights reserved.  
  7. //  
  8.   
  9. #import "myTextAttachment.h"  
  10.   
  11. @implementation myTextAttachment  
  12.   
  13. -(CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex  
  14. {  
  15.     return CGRectMake( 0 , 0 , lineFrag.size.height , lineFrag.size.height);  
  16. }  
  17. @end  

然后呢,程序这样写:
[objc]  view plain copy
  1. UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(015030021)];  
  2.     lable.textColor = [UIColor redColor];  
  3.     [self.view addSubview:lable];  
  4.       
  5.     //富文本  
  6.     NSString *message = @"我是郝高明,外号小胖,哈哈~";  
  7.     NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:message attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];  
  8.       
  9.     myTextAttachment *attachment = [[myTextAttachment alloc]init];  
  10. //    NSTextAttachment *attachment = [[NSTextAttachment alloc]initWithData:nil ofType:nil];  
  11.     UIImage *image = [UIImage imageNamed:@"80.png"];  
  12.     attachment.image = image;  
  13. //    attachment.bounds = CGRectMake(0, 0, 20, 20);  
  14.       
  15.     NSAttributedString *text = [NSAttributedString attributedStringWithAttachment:attachment];  
  16.     [str insertAttributedString:text atIndex:5];  
  17.       
  18.     lable.attributedText = str;  

4.制作富文本,可能你需要替换掉一段文字中得特殊字符,比如:
[objc]  view plain copy
  1. NSString *message = @"我是郝高明[icon],外号小胖,哈哈~";  
把这段话的[icon]替换成一个图片,那么这个应该怎么做呢?我们就用到了这个函数
[objc]  view plain copy
  1. - (void)replaceCharactersInRange:(NSRange)range withAttributedString:(NSAttributedString *)attrString;  
这是一个替换函数,怎么用呢?
[objc]  view plain copy
  1. UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(015030021)];  
  2.     lable.textColor = [UIColor redColor];  
  3.     [self.view addSubview:lable];  
  4.       
  5.     //富文本  
  6.     NSString *message = @"我是郝高明[icon],外号小胖,哈哈~";  
  7.     NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:message attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]}];  
  8.       
  9.     myTextAttachment *attachment = [[myTextAttachment alloc]init];  
  10.     UIImage *image = [UIImage imageNamed:@"80.png"];  
  11.     attachment.image = image;  
  12.       
  13.     NSAttributedString *text = [NSAttributedString attributedStringWithAttachment:attachment];  
  14.     NSRange range = [[str string]rangeOfString:@"[icon]"];  
  15.     [str replaceCharactersInRange:range withAttributedString:text];  
  16.       
  17.     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 阴影

你可能感兴趣的:(控件)