先搞清楚族谱
再搞清楚架构
- TextKit框架主要的几个View,主要包括
UILabel
,UITextView
,UITextField
;- TextKit是NS一支的,所以不光只在iOS中使用;
- Text container对应
NSTextContainer
,它定义了文本排版区域,很明显,文字是在这个区域中被管理的;- Text storage对应
NSTextStorage
,继承自NSMutableAttributedString
,用于存储文本字形和相关属性;- Layout manager对应
NSLayoutManager
,负责对文字进行编辑排版处理,在上面第4条中的类保存的数据可以通过本条中的类转换显示到视图中,其中这个单词字形(glyphs)需注意;
这张图很直观
我们来做点事情
首先我们需要一个自定义类型的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")
}
}
UITextView
的初始化方法中有一个textContainer
参数,很明显是我们上面提到的,且如图中三种颜色的框框所示,是我们上面提到的管理类,且全部为只读属性;
并且就上面的三种类之前的管理,如果我们要自己管理的话,应该也是一个树型的结构;
接下来我们要配合NSAttributedString
添加显示强大的富文本;
NSAttributedString
private(set) var attributedProblem: NSAttributedString = NSAttributedString.init()
{
willSet {
self.text = newValue.string
self.font = font //字体是会影响宽度的,所以该项如果