美文网首页iOS技术iOS开发
iOS富文本编辑器--高仿石墨文档编辑图文文章

iOS富文本编辑器--高仿石墨文档编辑图文文章

作者: Shin_R | 来源:发表于2018-01-02 09:47 被阅读104次
    实现再次编辑功能笔记。借鉴下面demo进行修改。(demo转载自https://github.com/littleMeaning/SimpleWord

    gitHub地址:GitHub - littleMeaning/SimpleWord: 模仿石墨文档文档编辑器,使用原生代码写的富文本编辑器,支持字体、颜色设置,支持缩进,列表、checkbox,支持插入图片等。 (*开发中)

    • 在LMWordViewController中添加对象方法,传入编辑的html数据。
    • 获取html数据中的图片
    - (NSArray *) getImageurlFromHtml:(NSString *) webString
    {
        NSMutableArray * imageurlArray = [NSMutableArray arrayWithCapacity:1];
        
        //标签匹配
        NSString *parten = @"<img(.*?)>";
        NSError* error = NULL;
        NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:parten options:0 error:&error];
        
        NSArray* match = [reg matchesInString:webString options:0 range:NSMakeRange(0, [webString length] - 1)];
        
        for (NSTextCheckingResult * result in match) {
            
            //过去数组中的标签
            NSRange range = [result range];
            NSString * subString = [webString substringWithRange:range];
            
            
            //从图片中的标签中提取ImageURL
            NSRegularExpression *subReg = [NSRegularExpression regularExpressionWithPattern:@"http://(.*?)\"" options:0 error:NULL];
            NSArray* match = [subReg matchesInString:subString options:0 range:NSMakeRange(0, [subString length] - 1)];
            NSTextCheckingResult * subRes = match[0];
            NSRange subRange = [subRes range];
            subRange.length = subRange.length -1;
            NSString * imagekUrl = [subString substringWithRange:subRange];
            
            //将提取出的图片URL添加到图片数组中
            [imageurlArray addObject:imagekUrl];
        }
        
        return imageurlArray;
    }
    
    • 用把获取到的图片URL数组 替换一个个图片地址的null值
    -(void)handlerAllAttechmentWith:(NSAttributedString *)attributedString withimagesArr:(NSArray*)imageUrl;
    {
        NSMutableArray *attachmentArr=[NSMutableArray array];
        NSRange effectiveRange = NSMakeRange(0, 0);
        while (effectiveRange.location + effectiveRange.length < attributedString.length) {
            NSDictionary *attributes = [attributedString attributesAtIndex:effectiveRange.location effectiveRange:&effectiveRange];
            NSTextAttachment *attachment = attributes[@"NSAttachment"];
            if (attachment) {
                [attachmentArr addObject:attachment];
            }
            effectiveRange = NSMakeRange(effectiveRange.location + effectiveRange.length, 0);
        }
        if (attachmentArr.count == imageUrl.count) {
        
            for (int i=0; i<attachmentArr.count; i++) {
        
                NSTextAttachment *att=attachmentArr[i];
                att.attachmentType = LMTextAttachmentTypeImage;
                att.userInfo=imageUrl[i];
            }
        }
    }
    

    相关文章

      网友评论

      • juefeiye:跑了下demo 性能还是可以
      • Civel_Xu:加载多个图片 滑动卡顿吗
        Shin_R:只是赋值的时候 很耗时
      • 583a28b22745:你好,请问你是如何实现再次编辑功能的,能否给个Demo,谢谢
        583a28b22745:@Shin_R :+1: 多谢
        Shin_R:将你需要编辑的html数据赋值给textView

        NSString *newString = [self.content stringByReplacingOccurrencesOfString:@"<img" withString:[NSString stringWithFormat:@"<img width=\"%f\"",LAScreenWidth - 40]];
        NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[newString dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType } documentAttributes:nil error:nil];
        self.wordViewController.textView.attributedText = attributedString;

        然后再去调上面的方法就好 。

      本文标题:iOS富文本编辑器--高仿石墨文档编辑图文文章

      本文链接:https://www.haomeiwen.com/subject/kacfnxtx.html