Сериализация UITextView с пользовательским NSTextContainer не восстанавливает текстовый контейнер - PullRequest
0 голосов
/ 23 марта 2019

У меня есть UITextView, использующий пользовательский подкласс NSTextContainer. Мой подкласс называется TDTBezierPathTextContainer. Я создаю UITextView так:

let textContainer = TDTBezierPathTextContainer(size:CGSize.zero) //NSTextContainer subclass
...
textView = UITextView(frame:r, textContainer:textContainer)

Это все работает, но мне нужно сохранить и восстановить точное состояние текстового представления. Для этого я использую протокол NSCoding.

Я кодирую текстовое представление так:

override public func encode(with aCoder: NSCoder) {        
    super.encode(with: aCoder)
    aCoder.encode(textView, forKey: "textView")
}

Я декодирую вот так:

public required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    if let textView = aDecoder.decodeObject(forKey: "textView") as? UITextView {
        textView.delegate = self
        addSubview(textView)
        self.textView = textView
    }
}

Проблема в том, что кодировка UITextView не кодирует мой пользовательский текстовый контейнер (даже если он находится на его графике). Когда я декодирую текстовое представление, оно, похоже, использует текстовый контейнер по умолчанию.

По-видимому, единственный способ указать текстовый контейнер - это когда создается экземпляр UITextView, поэтому кажется невозможным восстановить мое текстовое представление с помощью моего пользовательского текстового контейнера.

Я попытался создать новое текстовое представление и настроить все соответствующие свойства одинаково, но восстановление текстового представления немного отличается.

Есть ли способ сохранить / восстановить UITextView с пользовательским NSTextContainer без изменений?

...