Как сделать UITextView с нуля? - программирование

Как сделать UITextView с нуля?

Как я понимаю, Apple не предоставляет исходный код для UIKit. Чтобы ответить на еще один вопрос, я пытаюсь понять, как UITextView работает (или может быть сделано для работы) под капотом.

Как мне самому настроить минимальный UITextView?

Я вижу из documentation, что он наследует от UIScrollView, поэтому я предполагаю, что я начну там.

import UIKit
class MyUITextView: UIScrollView {

    // ???
}

Снова глядя на документы с текстовым представлением, похоже, что мне нужно как минимум реализовать метод init, а < свойство href= "https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextView_Class/#//apple_ref/occ/instp/UITextView/text" rel= "nofollow noreferrer" > text. (На данный момент я могу игнорировать все аспекты редактирования и атрибуты форматирования.)

Метод init принимает следующий вид:

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

Поэтому мне также понадобится свойство для NSTextContainer. Этот компонент TextKit работает вместе с NSTextStorage и NSLayoutManager, поэтому мне тоже нужно работать с ними где-то. Я мог бы установить NSTextStorage с свойством text, но я действительно не знаю, как здесь взаимодействует NSLayoutManager.

Кто-нибудь (за пределами Apple) сделал это раньше? Является ли это достаточно простым вопросом для ответа здесь или ответ будет длинным?

Update:

Этот вопрос показывает мою последнюю попытку: Как инициализировать NSTextStorage со строкой в ​​Swift

4b9b3361

Ответ 1

Это определенно сложно. Мне пришлось переопределить подмножество UILabel раньше, и это было сложно. Я думаю, что первое, о чем вы должны подумать, - это то, на каком уровне вы заинтересованы в работе. У него самое основное, UITextView отвечает за управление графическим контекстом растровой графики и превращение строки в пиксели на экране. Это само по себе является довольно большой проблемой, и если вы хотите переопределить эту функциональность с нуля, вы будете заняты какое-то время.

На более высоком уровне UITextView делает такие вещи, как разбиение текста на строки, отображение разных шрифтов; выше, и у вас есть такие вещи, как UITextInput Protocol, который позволяет пользователю вводить и обрабатывать содержимое текстового представления.

Что касается деталей реализации, то они, очевидно, недоступны. Самое близкое, что мы можем получить, это dump dump, что интересно, но может не сказать нам многого.

До iOS7 и TextKit обработка текста фактически обрабатывалась WebKit, что означает, что реализация потенциально более беспорядочна для того, чтобы претерпеть этот переход.

Во всяком случае, некоторые вещи указывают вам в правильном (или хотя бы a) направлении:

Я прошу прощения, что этот ответ, вероятно, не так полезен, как я предполагал. В принципе: это действительно большой вопрос; это, вероятно, несколько действительно больших вопросов.