ios 怎么改变html富文本格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios 怎么改变html富文本格式相关的知识,希望对你有一定的参考价值。

简单来说,是通过控件来完成的,而这些控件都封装在UIKit框架中(对于Mac OS X是AppKit框架),在UIKit中常用来在屏幕上显示字符串的控件有3个:

UILabel

UITextField

UITextView

然而这些控件本身对文本的展现方式很单一,通常仅仅能够控制字体样式、大小、颜色、加粗、斜体等等,而对于行距控制,字距控制,段落控制等高级功能却无能为力。

此时不免要提起一个非常强大的文本排版框架CoreText.framework。
CoreText框架是基于 iOS 3.2+ 和 OSX 10.5+ 的一种能够对文本格式和文本布局进行精细控制的文本引擎。它良好的结合了 UIKit 和 Core Graphics/Quartz:

UIKit 的 UILabel 允许你通过在 IB 中简单的拖曳添加文本,但你不能改变文本的颜色和其中的单词。
Core Graphics/Quartz几乎允许你做任何系统允许的事情,但你需要为每个字形计算位置,并画在屏幕上。
参考技术A 简单来说,是通过控件来完成的,而这些控件都封装在UIKit框架中(对于Mac OS X是AppKit框架),在UIKit中常用来在屏幕上显示字符串的控件有3个:

UILabel

UITextField

UITextView

然而这些控件本身对文本的展现方式很单一,通常仅仅能够控制字体样式、大小、颜色、加粗、斜体等等,而对于行距控制,字距控制,段落控制等高级功能却无能为力。

此时不免要提起一个非常强大的文本排版框架CoreText.framework。
CoreText框架是基于 iOS 3.2+ 和 OSX 10.5+ 的一种能够对文本格式和文本布局进行精细控制的文本引擎。它良好的结合了 UIKit 和 Core Graphics/Quartz:

UIKit 的 UILabel 允许你通过在 IB 中简单的拖曳添加文本,但你不能改变文本的颜色和其中的单词。
Core Graphics/Quartz几乎允许你做任何系统允许的事情,但你需要为每个字形计算位置,并画在屏幕上。
参考技术B   TextKit是iOS7新推出的文字排版技术,使用TextKit可以很方便的实现富文本、表情混排和图文混排等效果。TextKit中的几个关键的类:
  NSAttributeString和NSMutableAttributeString:属性字符串和可变属性字符串,这个TextKit中最基础的类,文字中的所有富文本属性都是通过属性字符串来表现出来的
  NSTextAttachment:字符串的附件,将图片,可以将图片等内容当做一个附件插入到属性字符串中,可以实现表情混排,链接等效果
  示例代码奉上:
  #import "TextKitEmojiTextVC.h"
  NSString * str = @"asfasfa阿斯顿发生大发撒放大离开家撒旦法按时付款就阿里;双方均asfasdfasfdalkjsflakj阿斯顿发生大发撒旦法asdfasdfaasfdaasa撒旦法;拉斯克奖发了奥斯卡奖罚洛杉矶的法律;看见谁发的阿斯利康就发;了数据库等法律按实际开发;阿里就开始放到了;安家费阿里山科技发达了开始将对方拉开始交电费了卡双方的空间啊发送卡飞机阿里开始就放暑假了罚款就是浪费";
  @interface TextKitEmojiTextVC ()<UITextViewDelegate>
  @property (nonatomic, strong) UITextView * textView;
  @end
  @implementation TextKitEmojiTextVC
  - (void)viewDidLoad
  [super viewDidLoad];
  self.title = @"普通文字排版&表情混排";
  //初始化textView
  self.edgesForExtendedLayout = UIRectEdgeNone;
  self.textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 20, [UIScreen mainScreen].bounds.size.width - 40, [UIScreen mainScreen].bounds.size.height - 40 - 44 - 20)];
  self.textView.backgroundColor = [UIColor cyanColor];
  self.textView.text = str;
  self.textView.font = [UIFont systemFontOfSize:15];
  self.textView.editable = NO;
  self.textView.delegate = self;
  [self.view addSubview:self.textView];
  //设置常规属性
  [self setupNormalAttribute];
  //链接和表情
  [self setupEmojiAndLink];
  
  /**
  * 向文本中添加表情,链接等
  */
  - (void)setupEmojiAndLink
  
  NSMutableAttributedString * mutStr = [self.textView.attributedText mutableCopy];
  //添加表情
  UIImage * image1 = [UIImage imageNamed:@"010"];
  NSTextAttachment * attachment1 = [[NSTextAttachment alloc] init];
  attachment1.bounds = CGRectMake(0, 0, 30, 30);
  attachment1.image = image1;
  NSAttributedString * attachStr1 = [NSAttributedString attributedStringWithAttachment:attachment1];
  [mutStr insertAttributedString:attachStr1 atIndex:50];
  //添加表情
  UIImage * image2 = [UIImage imageNamed:@"011"];
  NSTextAttachment * attachment2 = [[NSTextAttachment alloc] init];
  attachment2.bounds = CGRectMake(0, 0, 15, 15);
  attachment2.image = image2;
  NSAttributedString * attachStr2 = [NSAttributedString attributedStringWithAttachment:attachment2];
  [mutStr insertAttributedString:attachStr2 atIndex:100];
  //添加链接
  NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"];
  [mutStr addAttribute:NSLinkAttributeName value:url range:NSMakeRange(70, 10)];
  self.textView.attributedText = [mutStr copy];
  
  /**
  * 设置常规属性
  */
  - (void)setupNormalAttribute
  
  NSMutableAttributedString * mutStr = [self.textView.attributedText mutableCopy];
  //颜色
  [mutStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(10, 10)];
  //字体
  [mutStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:25] range:NSMakeRange(20, 5)];
  //下划线
  [mutStr addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle | NSUnderlinePatternDot) range:NSMakeRange(32, 8)];
  //空心字
  [mutStr addAttribute:NSStrokeWidthAttributeName value:@(2) range:NSMakeRange(42, 5)];
  self.textView.attributedText = [mutStr copy];
  
  /**
  * 点击图片触发代理事件
  */
  - (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange
  
  NSLog(@"%@", textAttachment);
  return NO;
  
  /**
  * 点击链接,触发代理事件
  */
  - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
  
  [[UIApplication sharedApplication] openURL:URL];
  return YES;
  
  - (void)didReceiveMemoryWarning
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
  
  @end

以上是关于ios 怎么改变html富文本格式的主要内容,如果未能解决你的问题,请参考以下文章

HTML 文档中的富文本编辑器如何实现其富文本格式?

iOS富文本编辑器

iOS WKWebView 加载富文本图片适配

iOS核心笔记——富文本属性

富文本编辑器怎么用

ios富文本的简单使用 AttributedString