使用自定义NSTextContainer序列化UITextView不会还原文本容器

时间:2019-03-23 07:47:25

标签: ios serialization uitextview nscoding nstextcontainer

我有一个使用自定义子类NSTextContainer的UITextView。我的子类称为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时,因此似乎无法使用自定义文本容器恢复我的文本视图。

我尝试创建一个新的textview并将所有相关属性设置为相同,但是恢复textview略有不同。

是否可以使用自定义的UITextView完整地存储/恢复NSTextContainer

0 个答案:

没有答案