用TextKit搞点事情

本文介绍了如何使用TextKit在iOS中处理富文本。从TextKit的架构和组件开始,包括NSAttributedString、TextStorage和LayoutManager。接着展示了如何创建自定义的UITextView,处理文本替换、属性修改和图片插入。最后,揭示了一些TextKit鲜为人知的特性,如获取文本区域的坐标。
摘要由CSDN通过智能技术生成

先搞清楚族谱

TextKit WWDC2013 Session 210

再搞清楚架构

重要的几个类

  1. TextKit框架主要的几个View,主要包括UILabel, UITextView, UITextField;
  2. TextKit是NS一支的,所以不光只在iOS中使用;
  3. Text container对应NSTextContainer,它定义了文本排版区域,很明显,文字是在这个区域中被管理的;
  4. Text storage对应NSTextStorage,继承自NSMutableAttributedString,用于存储文本字形和相关属性;
  5. Layout manager对应NSLayoutManager,负责对文字进行编辑排版处理,在上面第4条中的类保存的数据可以通过本条中的类转换显示到视图中,其中这个单词字形(glyphs)需注意;

这张图很直观

UITextView composition

我们来做点事情

首先我们需要一个自定义类型的UITextView,用它来对我们的文字内容进行自定义修改;

class ProblemView: UITextView {
   
    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

image_1ce5b0af015ldu4f476hvv1bhn2g.png-114.8kB

UITextView的初始化方法中有一个textContainer参数,很明显是我们上面提到的,且如图中三种颜色的框框所示,是我们上面提到的管理类,且全部为只读属性;
并且就上面的三种类之前的管理,如果我们要自己管理的话,应该也是一个树型的结构;

接下来我们要配合NSAttributedString添加显示强大的富文本;

NSAttributedString

    private(set) var attributedProblem: NSAttributedString = NSAttributedString.init()
    {
        willSet {
            self.text = newValue.string
            self.font = font    //字体是会影响宽度的,所以该项如果
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值