Swift - 文本框textView图文混排的实现

swift - 实现TextView高度自适应 实现思路: 使用UITextViewDelegate代理中的“textViewDidChange()方法”实现。 实现方法: 步骤一:创建TextViewAdapt.swift文件,在其中添加TextView控件,并设置textView.delegate =self(一定要设置好代理,否则不生效!!)。 import UIKit class TextViewAdapt: UIViewController { private var label = UILabel() priva. 阅读详情
我们使用文本框( UITextView)时,除了输入文字外,可能还会想在里面插入一些图片。或者有一些图文混排的内容需要展示出来。 这个只需要通过  textView 的属性化文本即可实现。j将图片以附件的形式插入即可。
本文通过样例演示如何实现  textView  的图文混排,同时还可以选择插入图片的模式,是保持原图大小,还是自适应尺寸(这些可以混合使用的。)

1,效果图
(1)不改变插入图片的大小
原文:Swift - 文本框textView图文混排的实现(附样例)

(2)让图片与行高保持一致。这样图片就不会撑大行高,同时会与文字的大小保持一致。适合用来插入表情图标。
      原文:Swift - 文本框textView图文混排的实现(附样例)        原文:Swift - 文本框textView图文混排的实现(附样例)

(3)让图片占满一行。适合普通图片或者大图的插入。
原文:Swift - 文本框textView图文混排的实现(附样例)


2,样例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import  UIKit
 
class  ViewController :  UIViewController  {
     
     //图文混排显示的文本区域
     @IBOutlet  weak  var  textView:  UITextView !
     
     //文字大小
     let  textViewFont =  UIFont .systemFont(ofSize: 22)
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         
         //初始化显示默认内容
         insertString( "欢迎欢迎!" )
         insertPicture( UIImage (named:  "icon" )!, mode:.fitTextLine)
         insertString( "\n欢迎访问:" )
         insertPicture( UIImage (named:  "logo" )!)
         insertPicture( UIImage (named:  "bg" )!, mode:.fitTextView)
     }
     
     //插入文字
     func  insertString(_ text: String ) {
         //获取textView的所有文本,转成可变的文本
         let  mutableStr =  NSMutableAttributedString (attributedString: textView.attributedText)
         //获得目前光标的位置
         let  selectedRange = textView.selectedRange
         //插入文字
         let  attStr =  NSAttributedString (string: text)
         mutableStr.insert(attStr, at: selectedRange.location)
         
         //设置可变文本的字体属性
         mutableStr.addAttribute( NSFontAttributeName , value: textViewFont,
                                 range:  NSMakeRange (0,mutableStr.length))
         //再次记住新的光标的位置
         let  newSelectedRange =  NSMakeRange (selectedRange.location + attStr.length, 0)
         
         //重新给文本赋值
         textView.attributedText = mutableStr
         //恢复光标的位置(上面一句代码执行之后,光标会移到最后面)
         textView.selectedRange = newSelectedRange
     }
     
     //插入图片
     func  insertPicture(_ image: UIImage , mode: ImageAttachmentMode  = . default ){
         //获取textView的所有文本,转成可变的文本
         let  mutableStr =  NSMutableAttributedString (attributedString: textView.attributedText)
         
         //创建图片附件
         let  imgAttachment =  NSTextAttachment (data:  nil , ofType:  nil )
         var  imgAttachmentString:  NSAttributedString
         imgAttachment.image = image
         
         //设置图片显示方式
         if  mode == .fitTextLine {
             //与文字一样大小
             imgAttachment.bounds =  CGRect (x: 0, y: -4, width: textView.font!.lineHeight,
                                           height: textView.font!.lineHeight)
         }  else  if  mode == .fitTextView {
             //撑满一行
             let  imageWidth = textView.frame.width - 10
             let  imageHeight = image.size.height/image.size.width*imageWidth
             imgAttachment.bounds =  CGRect (x: 0, y: 0, width: imageWidth, height: imageHeight)
         }
         
         imgAttachmentString =  NSAttributedString (attachment: imgAttachment)
         
         //获得目前光标的位置
         let  selectedRange = textView.selectedRange
         //插入文字
         mutableStr.insert(imgAttachmentString, at: selectedRange.location)
         //设置可变文本的字体属性
         mutableStr.addAttribute( NSFontAttributeName , value: textViewFont,
                                 range:  NSMakeRange (0,mutableStr.length))
         //再次记住新的光标的位置
         let  newSelectedRange =  NSMakeRange (selectedRange.location+1, 0)
         
         //重新给文本赋值
         textView.attributedText = mutableStr
         //恢复光标的位置(上面一句代码执行之后,光标会移到最后面)
         textView.selectedRange = newSelectedRange
         //移动滚动条(确保光标在可视区域内)
         self .textView.scrollRangeToVisible(newSelectedRange)
     }
     
     //插入图片1:保持原始尺寸
     @IBAction  func  btnClick1(_ sender:  AnyObject ) {
         insertPicture( UIImage (named:  "logo" )!)
     }
     
     //插入图片2:适应行高
     @IBAction  func  btnClick2(_ sender:  AnyObject ) {
         insertPicture( UIImage (named:  "icon" )!, mode:.fitTextLine)
     }
     
     //插入图片3:适应textView宽度
     @IBAction  func  btnClick3(_ sender:  AnyObject ) {
         insertPicture( UIImage (named:  "bg" )!, mode:.fitTextView)
     }
     
     //插入文字
     @IBAction  func  btnClick4(_ sender:  AnyObject ) {
         insertString( "hangge.com" )
     }
     
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}
 
//插入的图片附件的尺寸样式
enum  ImageAttachmentMode  {
     case  ` default `   //默认(不改变大小)
     case  fitTextLine   //使尺寸适应行高
     case  fitTextView   //使尺寸适应textView
}
源码下载: hangge_1213.zip

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1213.html
swift-MYCoreTextLabel轻量级图文混排实现图片文字混排 轻量级图文混排 , 实现图片文字混排 , 可显示常规链接比如网址,@,话题等 , 可以自定义链接字,设置关键字高亮等功能 . 适用于微博,微信,IM聊天对话等场景 . 仅需几百行代码 立即下载

相关推荐

swift5.0 UITextView基础使用

swift5.0 UITextView基础使用, 自学练习

Swift - 文本框textView图文混排的实现(附样例)

我们使用文本框(UITextView)时,除了输入文字外,可能还会想在里面插入一些图片。或者有一些图文混排的内容需要展示出来。 这个只需要通过 textView 的属性化文本即可实现。j将图片以附件的形式插入即可。 本文通过样例演示如何实现 textView 的图文混排,同时还可以选择插入图片的模式,是保持原图大小,还是自适应尺寸(这些可以混合使用的。) 1,效果图 (1)不改变插入图片

mo_xiao_mo的博客 2295

swift-利用coreText实现图文混排类似H5的新闻界面

利用coreText实现图文混排 类似H5的新闻界面

【Swift】 NSTextView用法和示例

NSTextView用法和示例

三岁牧羊的博客 1534

swift-一行代码搞定textView占位符和字数限制

一行代码搞定textView占位符和字数限制

【论文阅读】High-Resolution Image Synthesis with Latent Diffusion Models

为了降低训练扩散模型的算力,LDMs使用一个Autoencoder去学习能尽量表达原始image space的低维空间表达(latent embedding),大大减少需要的算力。在RGB空间:编码器encoder:,将x压缩成低维表示解码器decoder: D,将低维表示z还原成原始图像空间。1. 加入Autoencoder(上图中左侧红色部分),使得扩散过程在latent space下,提高图像生成的效率;

weixin_57974242的博客 1万+

swift中UITextView的使用

[objc] view plain copy   let textview = UITextView(frame: CGRectMake(10.0, 10.0, (CGRectGetWidth(self.view.bounds) - 10.0 * 2), 80.0))   self.view.addSubview(textview)              te

st646889325的博客 2679

大开眼界的十大开源人工智能项目

这是一个强大的开源工具,能让你在不同框架之间自由切换,无需重写代码。它是一个开源工具,能用简单的SQL语言同时处理数据和AI模型,让一切变得有序而高效。Rasa是我开发智能聊天机器人时的首选,它让你轻松掌控机器人对话的每个细节。我经常用它快速验证模型在不同框架下的表现,省去了大量烦躁的调试过程。最近发现的Vapi是一个以API方式提供的语音AI工具,开发者友好程度超乎想象。KNIME是一个以拖拽方式构建数据分析流程的开源工具,仿佛是数据界的乐高积木。它像个忠诚的守门员,确保你的模型始终健康运行。

wjianwei666的专栏 1104

iOS swift 实现图文混排 emoji小表情和文字都显示在一个textview中

//使用string 创建 NSMutableString var msgtext : NSMutableString = NSMutableString(string: msg.text) var range :NSRange = NSRange() var emoji : String = "" var locationlist

走在减肥道路上不断后退的小胖妹 1967

人工智能面试总结-分类与聚类

目录说说常用的分类算法,以及各自的优缺点?说说为什么正确率有时不能有效评估分类算法?说说什么样的分类器最好?说说聚类算法有哪些衡量标准?(选看)各聚类算法性能比较汇总说说什么是聚类,你知道哪些聚类算法?具体展开介绍你知道的聚类算法?说说K-Means聚类算法流程?说说K-Means聚类算法如何调优?说说K-Means聚类算法如何选择初始点?说说K-Means聚类聚的是特征还是样本?说说K-Means聚类的特征距离是如何计算的?说说聚类与分类的区别?手撕K-Means聚类 说说常用的分类算法,以及各自的优缺点

啥都生的博客 3862

全志F1C100S/F1C200S学习笔记(1)——基础简介及资料

资料: 荔枝派资料下载站 荔枝派github 荔枝派中文论坛 荔枝派DIY-github资料 荔枝派Nano 全流程指南 芒果派 坑网

丨晋丨 1万+

【Swift】图文混排,ios开发中在textfield或textView中插入图片

在ios开发中,我们一般都是在textfield或者textView中输入文字。当我们需要插入图片的时候其实也是很简单的 我们需要利用的textfield,textView的属性化文本,将图片以附件的形式插入 步骤如下:(以textView为了,oc中也是一样的) 创建附件,同时设置好textView的字体大小(或者在s...

aocaojia9711的博客 348

YOLOv11涨点改进 | Conv篇/小目标改进 | YOLOv11引入SPDConv卷积特征无损下采样模块,增加YOLOv11小目标P2检测层(助力小目标任务高效涨点)

本文提出了一种创新的SPDConv模块来优化YOLOv11模型,通过空间到深度(SPD)层和非步幅卷积层实现特征无损下采样。该方法有效解决了传统CNN中因跨步卷积和池化层导致的细粒度信息丢失问题,特别提升了小目标检测性能。实验表明,SPDConv在目标检测和图像分类任务中显著优于现有SOTA模型。文章详细介绍了模块原理、核心代码实现,并提供了YOLOv11集成SPDConv的具体方法,包括配置文件修改和P2层增强等优化技巧。该技术为计算机视觉任务提供了一种高效的特征保留方案。

Ai缝合怪、助力小伙伴高效发论文 586

textView 的设置文本中某一文字的字体颜色以及图文混排

ios7 新增的TextKit 技术 从书上看到的…… 首先需要声明3个类 分别是

dtxzp219的专栏 1042

置顶必读(2) | 《YOLOv11实战:从入门到深度优化》目录导航篇(持续更新中)

🏆 本文收录于 《YOLOv11实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现全网各类 YOLOv11 / YOLO系列改进方案与实战案例,目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么改”,更讲“为什么这样改、如何真正落地到项目中”。

**My Coding Family** 11万+

12、认知地图的建模与学习

本博客系统介绍了认知地图的定义、背景及其在机器智能领域的应用,重点探讨了模糊认知地图(FCMs)的建模方法与优势。文章还对比分析了几种主流的认知地图模型(如Axelrod模型、Kosko模型等),并讨论了模型的稳定性条件及实际应用前景。通过智能制造和医疗诊断的具体案例,展示了认知地图在复杂因果推理中的强大能力,并提出了模型优化方向与未来研究展望。

plant的博客 209

图文混排中,在textView的指定光标下插入文字或图片

override func viewDidLoad() {         super.viewDidLoad()           demoTextView.text = "我是大帅比,真的是一个大帅比,确实是一个大帅比"     }          //插入文字     @IBAction func insetText(sender: AnyObject) {   

cjb1224_0513的博客 670

基于Simulink的永磁同步电机三闭环(位置/速度/电流)控制仿真

本文详细介绍了基于Simulink的永磁同步电机三闭环控制系统设计与实现方法。系统采用位置环、速度环、电流环的三层嵌套结构,通过坐标变换(Clark/Park)实现解耦控制,达到精密定位目的。文章包含完整的建模步骤:从主电路搭建、三环PID设计到坐标变换与SVPWM调制实现,并提供了核心控制算法的MATLAB代码。通过工业机械臂关节场景验证,系统在阶跃响应(稳态误差0.002°)、正弦跟踪(误差0.008°)和抗扰动性能(恢复时间0.05s)方面表现优异。最后还提出了前馈补偿、扰动观测器等优化方向。该方案适

xiaoheshang_123的博客 280

用UITextView加载rtfd文件

用UITextView加载rtfd文件   效果   说明 使用此方法可以实现十分简易的富文本显示效果,包括图文混排等等效果。   源码 // // ViewController.m // Rtfd // // Created by YouXianMing on 15/9/10. // Copyright (c) 2015年 ZiPeiYi. All ...

weixin_33941350的博客 163

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

swift html编辑器,干货|swift,富文本编辑器

这一篇我们将实现一个富文本编辑器,拥有功能:1、斜体、下划线混排。2、图文混排3、字体大小。4、选择自定义字体。5、制作长图片分享到微信朋友圈与微信好友。6、调用系统邮件发送文本。先来看一下大体的效果吧,还有一些效果将在后面演示:(写在最前面,这个Demo存在大量BUG,我只是通过他来演示一些功能,也许在后面我会做一个完整的APP,到时候也会再来写一遍,来说说一些BUG如何处理)。1.png富文本...

weixin_32384503的博客 491

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

AztecEditor-iOS 双模式编辑实战:富文本与 HTML 源码视图无缝切换全解析

在 iOS 开发中,如何让用户既能像使用 Word 一样直观地编辑富文本,又能随时查看、修改背后的 HTML 源码?这是博客、CMS、笔记类 App 最常见的痛点。**AztecEditor-iOS** 正是为解决这一问题而生的开源组件——它是一个可复用的原生 iOS 富文本编辑器,内置「所见即所得」与「HTML 源码」双模式,并支持两种视图的无缝切换。本文将从零开始,带你全面解析它的双模式编辑架

gitblog_00030的博客 667

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

为什么说YYText是iOS开发中性能最强的富文本框架?揭秘其核心架构与实战应用

YYText作为iOS平台上功能最强大的富文本显示和编辑框架,为开发者提供了远超系统原生文本处理能力的解决方案。这个基于CoreText构建的高性能框架,不仅兼容UILabel和UITextView的API,更在异步渲染、文本布局、附件支持和交互体验等方面实现了重大突破。 ## 🚀 YYText核心架构深度解析 YYText的设计哲学是"在兼容性的基础上提供极致的性能与扩展性"。通过分层架构

gitblog_01078的博客 882

(一一二)图文混排中特殊文字的点击与事件处理

在上一篇文章(一一一)图文混排基础 -利用正则切割和拼接属性字符串中提到了对attributedText的特殊处理,将当中的话题、URL都用红色进行了表示。例如以下图所看到的: 本节要实现的功能是这种attributedText在点击话题、URL时应该有所响应,而在点击其它位置的时候把事件传递给父类处理。 要获取到点击的位置非常easy。仅仅须要重写touchesBegan...

weixin_34138056的博客 238
上一篇: xcode 获取git上之前的某个版本
下一篇: Mac电脑忘记管理员密码与忘记登陆密码处理(开机/恢复出厂设置/重置)
FlyingFireFish
博客等级 码龄9年 23粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值