如何从头开始制作UITextView?

时间:2015-06-04 03:40:18

标签: ios swift uitextview

据我了解,Apple does not provide the source code for UIKit。不过,为了回答another question,我试图理解UITextView如何工作(或可以使其工作)。

我如何自己设置最小UITextView

我从documentation看到它继承自UIScrollView,所以我假设我会从那里开始。

import UIKit
class MyUITextView: UIScrollView {

    // ???
}

再次查看文本视图文档,看起来我需要至少实现init方法和text属性。 (我现在可以忽略所有的编辑方面和格式化属性。)

init方法采用以下形式:

init(frame frame: CGRect, textContainer textContainer: NSTextContainer?)

所以我还需要NSTextContainer的属性。这个TextKit组件与NSTextStorageNSLayoutManager一起使用,所以我也需要在某个地方工作。我可以使用NSTextStorage属性设置text,但我真的不知道NSLayoutManager将如何在此处互动。

有没有人(Apple之外)以前做过这个?这是一个简单的问题在这里回答,还是答案很长?

更新

这个问题显示了我最近的尝试:How to Initialize NSTextStorage with a String in Swift

2 个答案:

答案 0 :(得分:1)

这绝对很复杂。我之前不得不重新实现UILabel的一个子集,这很棘手。我认为你应该考虑的第一件事就是你对工作感兴趣的程度。在最基本的情况下,UITextView负责操纵位图图形上下文并将字符串转换为屏幕上的像素。这本身就是一个相当大的挑战,如果你想从头开始重新实现这个功能,你将会忙碌一段时间。

在更高级别,UITextView执行的操作包括将文本分成行,显示不同的字体;更高,你有UITextInput Protocol之类的东西,它处理让用户输入和操纵文本视图的内容。

就实施细节而言,显然无法获得。我们能得到的最接近的是header dump,这很有意思但可能不会告诉我们太多。

在iOS7和TextKit之前,文本呈现实际上是由WebKit处理的,这意味着实现可能会因为经历过这种转变而变得更加混乱。

无论如何,有些事情要指向正确(或至少 )的方向:

我很抱歉这个答案可能没有我想要的那么有用。基本上:这是一个非常大的问题;它可能是多个非常重要的问题。

答案 1 :(得分:0)