文档章节

iOS中支持HTML文本的标签控件——MDHTMLLabel

珲少
 珲少
发布于 2016/06/30 11:24
字数 947
阅读 2302
收藏 2

iOS中支持HTML文本的标签控件——MDHTMLLabel

一、引言

        在iOS开发中对HTML的处理很多时候除了使用WebView外,还需要原生的控件对其进行渲染,例如将HTML字符串渲染为图文混排的View视图。Git上有很多轻量级的HTML渲染框架,列举一些如下:

RTLabel:基于UIView的HTML文本渲染控件,git地址:https://github.com/honcheng/RTLabel

RCLabel:与RTLabel思路相同,基于RCLabel之上,也是UIView的子类,支持了对HTML中的本地图片标签进行渲染。git地址:https://github.com/Janak-Nirmal/RichContentLabel

MDHTMLLabel:与RTLabel和RCLabel不同的是,其是UILabel的子类,更加轻量级,不能支持图片标签。git地址:https://github.com/mattdonnelly/MDHTMLLabel

    关于RCLabel对图片便签的支持,其只能支持本地的图片,不能支持远程URL图片链接,这在开发中将十分局限,以前我曾加RCLabel做了改造,加了支持远程图片URL的方法,我把它集成在了一个基础框架中,需要的伙伴可以参考下,git地址:https://github.com/ZYHshao/YHBaseFoundationTest。配套的讲解博客地址如下:http://my.oschina.net/u/2340880/blog/499311

    本篇博客主要讨论MDHTMLLabel的使用。

二、MDHTMLLabel的创建与设置

      MDHTMLLabel框架十分小巧,其中只有两个文件,总计2000余行代码。通过HTML字符串来创建一个MDHTMLLabel控件示例代码如下:

    NSString * kDemoText = @"<a href='http://github.com/mattdonnelly/MDHTMLLabel'>MDHTMLLabel</a> is a lightweight, easy to use replacement for <b>UILabel</b> which allows you to fully <font face='Didot-Italic' size='19'>customize</font> the appearence of the text using HTML (with a few added features thanks to <b>CoreText</b>), as well letting you handle whenever a user taps or holds down on link and automatically detects ones not wrapped in anchor tags/>";
    MDHTMLLabel *htmlLabel = [[MDHTMLLabel alloc] initWithFrame:self.view.frame];
    htmlLabel.numberOfLines = 0;
    htmlLabel.htmlText = kDemoText;
    [self.view addSubview:htmlLabel];

效果如下图所示:

MDHTMLLabel中可以设置的一些属性解析如下:

//设置超链接文字的属性字典 和设置AttributeString方法一致
@property (nonatomic, strong) NSDictionary *linkAttributes;
//设置超链接文字激活时的属性字典
@property (nonatomic, strong) NSDictionary *activeLinkAttributes;
//设置超链接非激活时的属性字典
@property (nonatomic, strong) NSDictionary *inactiveLinkAttributes;
//设置超链接文字触发长按事件的最小按下时间
@property (nonatomic, assign) NSTimeInterval minimumPressDuration;
//设置label文件阴影的模糊半径
@property (nonatomic, assign) CGFloat shadowRadius;
//设置label在高亮状态下的文字模糊半径 注:非高亮状态的由原生UILabel的属性设置
@property (nonatomic, assign) CGFloat highlightedShadowRadius;
//设置label在高亮状态下的文字阴影偏移 注:非高亮状态的由原生UILabel的属性设置
@property (nonatomic, assign) CGSize highlightedShadowOffset;
//设置在label高亮状态下的文字阴影颜色 注:非高亮状态的由原生UILabel的属性设置
@property (nonatomic, strong) UIColor *highlightedShadowColor;
//设置首行文字的缩进距离
@property (nonatomic, assign) CGFloat firstLineIndent;
//设置文字的行间距
@property (nonatomic, assign) CGFloat leading;
//设置行高的倍数
@property (nonatomic, assign) CGFloat lineHeightMultiple;
//设置文字内容的边距
@property (nonatomic, assign) UIEdgeInsets textInsets;
//设置文字垂直方向的对其模式 默认为居中对其 MDHTMLLabelVerticalAlignment枚举意义如下:
/*
typedef NS_ENUM(NSUInteger, MDHTMLLabelVerticalAlignment) {
    MDHTMLLabelVerticalAlignmentCenter   = 0, //居中对其
    MDHTMLLabelVerticalAlignmentTop      = 1, //顶部对其
    MDHTMLLabelVerticalAlignmentBottom   = 2, //底部对其
};
*/
@property (nonatomic, assign) MDHTMLLabelVerticalAlignment verticalAlignment;
//设置文字的截断模式
@property (nonatomic, strong) NSString *truncationTokenString;
//根据内容获取控件尺寸
+ (CGFloat)sizeThatFitsHTMLString:(NSString *)htmlString
                         withFont:(UIFont *)font
                      constraints:(CGSize)size
           limitedToNumberOfLines:(NSUInteger)numberOfLines;

关于HTML数据中的超链接的相应,MDHTMLLabel是通过代理回调的方式处理的,如下:

@protocol MDHTMLLabelDelegate <NSObject>
@optional
//点击超链接的时候触发的方法
- (void)HTMLLabel:(MDHTMLLabel *)label didSelectLinkWithURL:(NSURL*)URL;
//长按超链接时触发的方法
- (void)HTMLLabel:(MDHTMLLabel *)label didHoldLinkWithURL:(NSURL*)URL;
@end

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

© 著作权归作者所有

珲少

珲少

粉丝 889
博文 395
码字总数 478712
作品 0
上海
程序员
私信 提问
小程序iOS客户端框架—控件事件逻辑框架与控件原生化

小程序自发布以来,为开发者和用户提供了一种轻量级的App。作为一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。小程序也体现了“用...

codeGoogle
2018/04/26
0
0
小程序iOS客户端框架——控件事件逻辑框架与控件原生化

小程序自发布以来,为开发者和用户提供了一种轻量级的App。作为一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。小程序也体现了“用...

codeGoogle
2018/04/24
0
0
【书坊赠书福利——第二期】《iOS 8开发指南》

本周是人邮IT书坊赠书的第二期,第一期参与度极高,微信君在此感谢你们的支持,第一期获奖赠书已全部寄出。 本周赠品 本周,微信君给大家推荐@人民邮电出版社-信息技术分社 刚刚上架的新书《...

生气的散人
2014/09/23
395
0
CocoaUI 1.2.4 版本发布!

---------------------------------------------------------------- 支持XML+CSS布局的 iOS 原生 UI 框架 CocoaUI 发布了 1.2.4 版本, 这个版本的最大特点就是更加符合CSS规范, 同时支持带有...

ideawu
2015/11/16
329
2
CocoaUI 1.2.4 版本发布,iOS 流式布局框架

---------------------------------------------------------------- 支持XML+CSS布局的 iOS 原生 UI 框架 CocoaUI 发布了 1.2.4 版本, 这个版本的最大特点就是更加符合CSS规范, 同时支持带有...

ideawu
2015/11/16
2.6K
7

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
9
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
8
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
9
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
7
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部