据我了解,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
组件与NSTextStorage
和NSLayoutManager
一起使用,所以我也需要在某个地方工作。我可以使用NSTextStorage
属性设置text
,但我真的不知道NSLayoutManager
将如何在此处互动。
有没有人(Apple之外)以前做过这个?这是一个简单的问题在这里回答,还是答案很长?
更新
这个问题显示了我最近的尝试:How to Initialize NSTextStorage with a String in Swift
答案 0 :(得分:1)
这绝对很复杂。我之前不得不重新实现UILabel的一个子集,这很棘手。我认为你应该考虑的第一件事就是你对工作感兴趣的程度。在最基本的情况下,UITextView
负责操纵位图图形上下文并将字符串转换为屏幕上的像素。这本身就是一个相当大的挑战,如果你想从头开始重新实现这个功能,你将会忙碌一段时间。
在更高级别,UITextView
执行的操作包括将文本分成行,显示不同的字体;更高,你有UITextInput Protocol之类的东西,它处理让用户输入和操纵文本视图的内容。
就实施细节而言,显然无法获得。我们能得到的最接近的是header dump,这很有意思但可能不会告诉我们太多。
在iOS7和TextKit之前,文本呈现实际上是由WebKit处理的,这意味着实现可能会因为经历过这种转变而变得更加混乱。
无论如何,有些事情要指向正确(或至少 )的方向:
我很抱歉这个答案可能没有我想要的那么有用。基本上:这是一个非常大的问题;它可能是多个非常重要的问题。
答案 1 :(得分:0)
您可以使用以下来源了解幕后发生的情况。 Apple'e的实现不一定是相同的。
https://github.com/BigZaphod/Chameleon/blob/master/UIKit/Classes/UITextView.h https://github.com/BigZaphod/Chameleon/blob/master/UIKit/Classes/UITextView.m