我有一个使用自定义子类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
?