iOS开发--UILabel加载Html内容, 并添加超链接的点击

UILabel加载Html文本 项目中本来应该是一个简单的label就可以实现的东西,产品非要给文本加个类似富文本的效果。 如果文本固定也就算了,偏偏某些字还是不确定的,后台给返回了一串html。 于是网上调研一番,发现UILabel是可以加载html的。具体实现代码如下: //取出htmlStr NSString * htmlStr = [NSString stringWithFormat:@"%@",dic[@"shareDesc"]]; //转成带属性的字符串 NSAttributedString * attStr = [[NSA 阅读详情

场景:

项目中的简介(关于)页面, 服务器给返回了Html的语句, 展示相关的内容

方案:

  1. 想用WKWebView去加载, 但是, WK的在轻量级需求而言, 消耗资源大就成了其短板.
  2. 使用UILabel + 富文本

对比两个方案, 开启WK的消耗资源大, 再加上当前页面只是文字展示, 所以, 方案二是相对而言的最佳方案.

解决:

在解决的过程中, 本来以为只是展示出就可以了, 发现Html中包含了href的超链接, 所以, 如果你的项目中, 也有包含href的超链接, 那么可以参考步骤2和步骤3, 如果没有只看步骤1即可

1. 将html转换成富文本

重点为: NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType

- (NSMutableAttributedString *)getContentHtml:(NSString *)content {
    NSDictionary *options = @{NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
                              NSCharacterEncodingDocumentAttribute : @(NSUTF8StringEncoding)};
    NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithData:data options:options documentAttributes:nil error:nil];
    
    // 设置段落格式
    NSMutableParagraphStyle *para = [[NSMutableParagraphStyle alloc] init];
    para.lineSpacing = 8;
	para.paragraphSpacing = 10;
    [attStr addAttribute:NSParagraphStyleAttributeName value:para range:NSMakeRange(0, attStr.length)];
    
    // 设置文本的Font
    [attStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:NSMakeRange(0, attStr.length)];
    
    return attStr;
}
2. 给UILabel添加点击事件, 注意, 这里需要将UILabel的用户交互打开
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickLink)];
// 打开用户交互
self.contentLabel.userInteractionEnabled = YES;
[self.contentLabel addGestureRecognizer:tap];
3. 处理点击UILabel点击富文本中的超链接

解析html中的链接 NSTextCheckingTypeLink

- (void)clickLink {
    NSString *chatStr = @"这里需要填写Html内容, 不是UILabel的text 或者 NSMutableAttributedString";
    
    NSDataDetector *detector= [[NSDataDetector alloc] initWithTypes:NSTextCheckingTypeLink error:nil];
    NSArray *checkArr = [detector matchesInString:chatStr options:0 range:NSMakeRange(0, chatStr.length)];
    //判断有没有链接
    if(checkArr.count > 0) {
        
        LTCWebViewController *webVC =  [[LTCWebViewController alloc] init];
        if (checkArr.count > 1) { //网址多于1个时让用户选择跳哪个链接
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"请选择要打开的链接" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
            [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
            
            for (NSTextCheckingResult *result in checkArr) {
                NSString *urlStr = result.URL.absoluteString;
                [alertController addAction:[UIAlertAction actionWithTitle:urlStr style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                    
                    webVC.urlString = urlStr;
                    [self.navigationController pushViewController:webVC animated:YES];
                }]];
            }
            [self presentViewController:alertController animated:YES completion:nil];
            
        }else {//一个链接直接打开
            
            webVC.urlString = [checkArr[0] URL].absoluteString;
            [self.navigationController pushViewController:webVC animated:YES];
        }
    }
}
iOS开发实战:使用FTCoreText实现UILabel的HTML解析效果 FTCoreText是一个基于iOS原生CoreText框架深度封装的高性能富文本渲染库,旨在解决UILabel无法直接解析HTML字符串的痛点问题。该库通过扩展UILabel的功能,实现对HTML标签的解析与富文本展示,支持字体、颜色、链接、图片等复杂排版需求。相较于使用WKWebView或UIWebView加载HTML内容,FTCoreText在轻量级文本渲染场景中具备显著优势——更低的内存占用、更高的绘制效率,以及更灵活的布局控制能力。 阅读详情

相关推荐

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

iOS富文本(NSAttributedString)

1.加载HTML标签文本 因为解析的数据里面有html标签,就使用下面的代码把字符串转换成data,初始化时再用HTML类型,转换为富文本。 NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUnicodeString

kashjack的博客 653

交换机基本介绍(分类、性能指标、硬件构成及工作方式)

一、交换机的分类与性能指标 1.1交换机的分类 按照网络构成方式来分的话,交换机分为三类:接入层交换机、汇聚层交换机和核心层交换机。 按照OSI模型来划分的话,分为:二层交换机、三层交换机和四层交换机 还有一种按照硬件形态来划分,可以分成两类:盒式交换机和机框式交换机。 盒式交换机是一种有固定端口数,有时也会带有少量扩展槽的交换机。机架式交换机是一种插槽式的交换机,这种交换机扩展性较好,可支持不同的网络类型,可支持更大端口密度的网络。一般在数据中心的接入层都会采用盒式交换机,盒式...

monologuezjp的博客 4万+

uilabel 支持html,UILabel加载HTML

NSString *string1 = @"什么情况";UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 200, 20)];NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc]initWithData:[string...

weixin_30898555的博客 852

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 321

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1652

iOS中HTML文本的展示

HTML文本的显示依靠NSAttributedString这个类NSHTMLTextDocumentType 只是NSDocumentTypeDocumentAttribute key一种可能的值。你还可以使用NSPlainTextDocumentType,NSRTFTextDocumentType或是 NSRTFDTextDocumentType。//读取htmlNSString *html =

shang1219178163的专栏 2842

uniapp | vue2 | vue3 - 解决调用天地图功能服务时 http 网络请求报错 net::ERR ABORTED 503(Service Temporarily Unavailabl)

vue,uni-app,天地图,请求报错,503,请求失败,map.tianditu,天地图503,天地图请求503,接口503错误怎么办,vue天地图,uniAPP天地图,获取定位接口服务器报错503,获取当前定位,定位功能,IP属地定位,天地图服务器报错,如何解决报错,net::ERRABORTED503(ServiceTemporarilyUnavailabl),GET,POST,服务暂时不可用,react天地图,一直等待吗,报错怎么办,定位报错,轨迹,经纬度,天地图服务器503,在vue2

🏆 前端领域优质创作者 4438

ios 如何展示html代码,iOS中HTML文本的展示

HTML文本的显示依靠NSAttributedString这个类NSHTMLTextDocumentType 只是NSDocumentTypeDocumentAttribute key一种可能的值。你还可以使用NSPlainTextDocumentType,NSRTFTextDocumentType或是 NSRTFDTextDocumentType。//读取htmlNSString *html =...

weixin_33187554的博客 1002

大模型自我认知微调的实战教程

本文主要介绍了大模型自我认知微调的实战教程,希望对学习大语言模型的同学们有所帮助。微调成功并保留原有能力的截图如下所示: 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 3. 实战代码 3.1 配置数据集 3.2 lora微调

herosunly的博客 4万+

腾讯音乐 QQ音乐商业化客户端开发工程师:岗位深度解析与面试攻略

腾讯音乐QQ音乐商业化客户端开发工程师岗位要求3年以上Android开发经验,熟练掌握Kotlin/Java及跨端开发技术。核心职责包括QQ音乐客户端功能开发、架构优化、性能提升及技术攻关。岗位要求计算机相关本科以上学历,具备完整项目开发经验,熟悉TCP/IP等网络协议,能独立解决复杂技术问题。面试重点考察项目经验、架构设计、性能优化及新技术研究能力,建议候选人准备具体案例,量化成果,并熟悉Flutter等跨端技术。该职位强调技术深度与产品思维的结合,需展现扎实的编程基础、问题解决能力和团队协作精神。

郑伟强dev的专栏 366

iOS UILabel加载html点击图片查看大图 附demo

鸡冻,可以说相当鸡冻了,今天终于解决了困扰我很久的问题。 我们在有些时候,因为性能和加载时间的问题,需要用UILabel加载html的方式来代替webview。 大部分情况,UILabel都可以很好的展示出想要的效果,但是却不能满足点击查看大图的需求。 本解决方式思路:根据点击的point 判断是否属于图片 示例html代码 <p>这是第一张图片</p> <p>...

msbaby的博客 2071

五十天精通硬件设计第6天-放大器知识及选型

运算放大器(Operational Amplifier,简称运放)是一种高增益的直流耦合差分放大器,广泛应用于信号处理、滤波、比较、积分、微分等电路中。

whm128的博客 592

ios label html图片,iOS UILabel与UITextView加载图片富文本点击看大图

背景:功能:回复列表要求:界面按UI给的效果图收到的数据:带各种标签的html格式的字符串(包括web端的表情图片)如果只是想简单的加载HTML(包括图片),点击这里。解决方案:UILabel或UITextView加载富文本取代带图片的HTML过滤掉 web端 回复内容 已知 的所有标签NSString *text = allHtmlText;//NSLog(@"这是评论的内容%@",text);...

weixin_30878111的博客 346

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

uilabe加载html,UITextView和UILabel加载HTML的示例分析

UITextView和UILabel加载HTML的示例分析发布时间:2021-04-14 11:46:10来源:亿速云阅读:103作者:小新小编给大家分享一下UITextView和UILabel加载HTML的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Demo效果截图这demo中是放在cell里面加载的,并且教...

weixin_30630377的博客 393

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ios加载html游戏,iOS UILabel加载HTML文本

项目中有时候接口返回HTML格式的文本,客户端显示,第一反应用webView啊,但是返回的文本不多,使用耗能极大的webView得不偿失啊,所以这时候才用UILabel或是UITextView加载HTML格式的文本。具体测试代码如下:- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading t...

weixin_31319319的博客 245

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS UILabel加载html富文本

//html富文本显示在label上 NSDictionary *optoins=@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSFontAttributeName:[UIFont systemFontOfSize:14]}; NSD...

ForeverMyheart的博客 1614

iOS UIlabel怎么加载html字符串 富文本的用法

要加载html字符串,用人说,直接用webView啊!但是,有时候我们只需要显示2行文字,如此少的内容却要在复杂的UI排版中加入一个占用资源较多的webview,得不偿失。这里要说的是,我们其实可以用label即可加载html字符的,用富文本转一下html字符串即可。 //创建UILabel _Test_Lbl = [[UILabel alloc] initWithFr...

weixin_30246221的博客 929

iOS中OC加载HTML字符串

iOS中OC加载HTML字符串 最近项目里面遇见了 HTML 字符串,整理如下: 后台返回字符串的样式 在 iOS 中通常加载 HTML 字符串有两种方式 通过 UILabel 加载富文本的方法加载 HTML 字符串通过 WebView 加载 HTML 字符串 - (void)viewDidLoad { [super viewDidLoad];

sheng_bin的博客 6607

uilabe加载html,UITextView和UILabel加载HTML_html/css_WEB-ITnose

前言最近有不少朋友们、群友们经常问到UITextView如何加载HTML?UILabel能加载HTML吗?或者问后台接口返回来的是HTML格式的数据,我该怎么显示呢?怎么处理呢?在这里,笔者针对这些朋友、群友们的反馈,尝试写了个小demo,希望能够帮助到大家吧!Demo效果截图这demo中是放在cell里面加载的,并且教大家如何自动计算行高。不过UITextView计算行高是有误差的,因为笔者没有...

weixin_39830225的博客 296

UILabel 和 UIButton加载html文本和部分字体颜色变色

一、UILabel加载html文本 NSString *htmlStr = @"<b style='color: #0055cc;'>测试</b><b style='color: #0055cc;'>测试</b>"; NSMutableAttributedString *htmlAttStr = [[NSMutableAttributedString alloc] initWithData:[_activityModel.title dataUsingEnc

wapony的博客 411

iOS UILabel加载HTML文本

项目中有时候接口返回HTML格式的文本,客户端显示,第一反应用webView啊,但是返回的文本不多,使用耗能极大的webView得不偿失啊,所以这时候才用UILabel或是UITextView加载HTML格式的文本。 具体测试代码如下: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup af...

weixin_34019144的博客 1415

ios html内容加入html,iOS加载Html文本

UILable||UITextView加载html使用UILable或TextView比较方便,但是字体样式无法保证,推荐使用下面的UIWebView加载UITextView *titleTexV;- (void)setTitleStr:(NSString *)titleStr{_titleStr = titleStr;//添加行间距,不过没用self.attriStr = [self setHo...

weixin_42415451的博客 358

ios html字符串 label,iOS UIlabel怎么加载html字符串 富文本的用法

要加载html字符串,用人说,直接用webView啊!但是,有时候我们只需要显示2行文字,如此少的内容却要在复杂的UI排版中加入一个占用资源较多的webview,得不偿失。这里要说的是,我们其实可以用label即可加载html字符的,用富文本转一下html字符串即可。//创建UILabel_Test_Lbl = [[UILabel alloc] initWithFrame:CGRectMake(1...

weixin_33168794的博客 340

ios oc调用html,iOS开发网络篇 —— OC加载HTML代码(示例代码)

html代码图1样式一:"测试内容信息无错"样式二:padding: 0px 4px 0px 0px; text-align: left; margin: 0px 0px 10px;\\">你好 了的好莱坞去任何图2一、情景1:加载到UILabel上面(转换成富文本即可)//1.将字符串转化为标准HTML字符串NSString *str1 = [self htmlEntityDecode:h...

weixin_35445090的博客 658
上一篇: iOS开发-- iPad iOS14下 UICollectionView 的 scrollToItemAtIndexPath 方法失效
下一篇: 微信小程序--处理键盘收起
单细胞的逻辑
博客等级 码龄10年 19粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值