Text Kit入门
2013-11-06 22:58 Tracy E 阅读(538) 评论(0) 编辑 收藏 举报更详细的内容可以参考官方文档 《Text Programming Guide for iOS》。
“Text Kit指的是UIKit框架中用于提供高质量排版服务的一些类和协议,它让程序能够存储,排版和显示文本信息,并支持排版所需要的所有特性,包括字距调整、连写、换行和对齐等。”
以前,如果我们想实现复杂的文本排版,例如在textView中显示不同样式的文本,或者图片和文字混排,你可能就需要借助于UIWebView
或者深入研究一下Core Text
。在iOS6中,UILabel
、UITextField
、UITextView
增加了一个NSAttributedString
属性,可以稍微解决一些排版问题,但是支持的力度还不够。现在Text Kit完全改变了这种现状。
Text Kit是基于Core Text构建的快速、先进的文本排版和渲染引擎,并且与UIKit
很好的集合。UITextView
,UITextField
、UILabel
都已经基于Text Kit重新构建,所以它们都支持分页文本、文本包装、富文本编辑、交互式文本着色、文本折叠和自定义截取等特性。所有这些UI控件现在都以同样的方式构建,在它们后面,一个NSTextStorage
对象保存着文本的主要信息,它本身是NSMutableAttributedString
的子类,支持分批编辑。这就意味着你可以改变一个范围内的字符的样式而不用整体替换文本内容。
[self.textView.textStorage beginEditing]; [self markWord:@"Alice" inTextStorage:self.textView.textStorage]; [self.textView.textStorage endEditing];
Text storage管理者一系列的NSLayoutManager
对象,当它的字符或者属性改变时会通知到自己所管理的layout Manager对象以便它们作出相应的反应。在layout manager上面是一个NSTextContainer
对象,用于为layout manager定义坐标系和一些几何特性。例如,如果你想UITextView
中的文本环绕在一张图片四周,你可以给text container设定一个排除路径(exclusion path)。
UIBezierPath *exclusion = ButterflyBezierPath; self.textView.textContainer.exclusionPaths = @[exclusion];
Text container能够处理击中测试(hit tests),所以可以定位到点击的字符在文本中的位置。此外它还提供一些代理方法让开发者能够自己定义链接点击后的处理事件。
通过基于Text Kit重新构建UILabel
、UITextField
和UITextView
,苹果给开发者更大的灵活性和能力来设计富文本视图,同时简化了这些控件的使用,因为它们是以同样的方式设计的,所有这些好处都是站在巨人(Core Text)的肩上。通常更强大的功能和灵活性也就意味着需要更多的设置和管理,但是,如果你只是想显示一段简单的文本,你还是可以像以前一样使用。
self.textLabel.text = @"Hello Text Kit";
本文翻译自《iOS 7: Text Kit》
Posted by TracyYih - Oct 17 2013
如需转载,请注明: 本文来自 Esoft Mobile