zoukankan      html  css  js  c++  java
  • 富文本,图文混排

    1.控制器代码

    #import "ViewController.h"

    #import "NSAttributedString+Emoji.h"

     

    @interface ViewController ()

     

    @property(nonatomic,strong)UILabel*labelText;

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        UILabel *label=[[UILabel alloc]init];

        label.frame=CGRectMake(10, 30, 300, 300);

        NSString *str=@"大脸毅s012 s013 s014 s015dfadsfasdfs dfdf";

        label.numberOfLines=0;

        self.labelText=label;

        //self.labelText.backgroundColor=[UIColor grayColor];

        [self.view addSubview:label];

        //特殊文本 加表情 方法一

        //[self text1WithStr:str];

        

        //自定义类递归实现 方法二

        NSMutableAttributedString *attriM=[[NSMutableAttributedString alloc]initWithString:str];

        NSAttributedString *result=[NSAttributedString emojiStringWithString:attriM];

        self.labelText.attributedText=result;

        

        

        

        

        

    }

    -(void)text1WithStr:(NSString*)str

    {

        //属性字符串 只有文本的属性字符串

        NSAttributedString *strm=[[NSAttributedString alloc]initWithString:str];

        

        //创建一个带图片的附件对象

        NSTextAttachment *atchment=[[NSTextAttachment alloc]init];

        //给附件对象添加image;

        atchment.image=[UIImage imageNamed:@"s012.png"];

        NSAttributedString *strImage=[NSAttributedString attributedStringWithAttachment:atchment];

        //用可变字符串来替换拼接附件文本和普通文本

        NSMutableAttributedString *attributedStringM=[[NSMutableAttributedString alloc]initWithAttributedString:strm];

        //正则表达式

        NSString *pattren=@"[s][0-9]{3}";

        NSRegularExpression *regular=[NSRegularExpression regularExpressionWithPattern:pattren options:1 error:NULL];

        NSTextCheckingResult *result=[regular firstMatchInString:str options:1 range:NSMakeRange(0, str.length)];

        

        [attributedStringM replaceCharactersInRange:result.range withAttributedString:strImage];

        self.labelText.attributedText=attributedStringM;

     

    }

     

    @end

    2.分类代码

     

    #import <Foundation/Foundation.h>

     

    @interface NSAttributedString (Emoji)

     

    + (NSAttributedString *)emojiStringWithString:(NSMutableAttributedString *)emojiString;

     

    @end

     

    #import "NSAttributedString+Emoji.h"

    #import <UIKit/UIKit.h>

    @interface EmojiAttachment : NSTextAttachment

     

    @end

     

    @implementation EmojiAttachment

     

    //I want my emoticon has the same size with line's height

    - (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex

    {

        return CGRectMake( 0 , -3, lineFrag.size.height, lineFrag.size.height);

    }

     

    @end

     

     

    @implementation NSAttributedString (Emoji)

     

    + (NSAttributedString *)emojiStringWithString:(NSMutableAttributedString *)emojiString

    {

        NSRegularExpression *regularEx = [NSRegularExpression regularExpressionWithPattern:@"s[0-9]{3}" options:NSRegularExpressionCaseInsensitive error:nil];

        NSString *string = emojiString.string;

        NSTextCheckingResult *result = [regularEx firstMatchInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, string.length)];

        if (result != nil) {

            NSString *imageName = [NSString stringWithFormat:@"%@.png", [string substringWithRange:result.range]];

            EmojiAttachment *attachment = [[EmojiAttachment alloc] initWithData:nil ofType:nil];

            attachment.image = [UIImage imageNamed:imageName];

            NSAttributedString *attrString = [NSAttributedString attributedStringWithAttachment:attachment];

            [emojiString replaceCharactersInRange:result.range withAttributedString:attrString];

            // 递归

            [self emojiStringWithString:emojiString];

        } else {

            return emojiString;

        }

        return emojiString;

    }

     

    @end

     

  • 相关阅读:
    构造代码块/局部代码块/静态代码块
    经典设计模式之:单例设计模式
    JS对表单的操作
    单例模式详解:懒汉式与饿汉式
    win10获取超级管理员权限脚本实现
    CIA 读书笔记
    Google Code Jam 2014 资格赛:Problem D. Deceitful War
    Google Code Jam 2014 资格赛:Problem C. Minesweeper Master
    Google Code Jam 2014 资格赛:Problem B. Cookie Clicker Alpha
    Google Code Jam 资格赛: Problem A. Magic Trick
  • 原文地址:https://www.cnblogs.com/tangranyang/p/4657418.html
Copyright © 2011-2022 走看看