Я пытаюсь получить редактируемый textView
с возможностью встраивания 'Custom View
', как показано:
Это представление включает 2 текстовых поля (оно показывает определение слова). view
динамически изменяется в зависимости от того, какое определение выбрано. В настоящее время я могу добавить его в textView как NSAttachment
как изображение (так как я не могу прикрепить пользовательский view
к textView
), но если я сделаю это таким образом, у меня не будет никакого способа доступ к тому, что текст внутри пользовательского представления, если мне нужно обновить представление.
Может кто-нибудь дать мне решение, где я мог бы каким-то образом хранить информацию, которая находится в пользовательском представлении? Я хочу убедиться, что в будущем я смогу получить доступ к данным в случае изменения дизайна представления, и я хотел бы обновить его. Нужно ли мне перейти на WebView
и каким-то образом создать пользовательский анализ в HTML, который ищет информацию определения и затем форматирует ее?
РЕДАКТИРОВАТЬ: Код, используемый для создания NSAttachment. Функция returnView () возвращает объект просмотра, как показано красным на фотографии выше. Остальная часть viewController - это просто textView, который сохраняет NSAttributedString в Базовый объект данных.
func viewToNSAttachment() {
let view = returnView()
view.layoutIfNeeded()
// Render Image
let renderer = UIGraphicsImageRenderer(size: view.frame.size)
let image = renderer.image {
view.layer.render(in: $0.cgContext)
}
// Create Attachment
let attachment = NSTextAttachment()
attachment.image = image
attachment.bounds = CGRect(origin: .zero, size: image.size)
// Current Attributed String
let atStr = NSMutableAttributedString(attributedString: textView.attributedText)
// Insert Attachment
let attachmentAtStr = NSAttributedString(attachment: attachment)
if let selectedRange = textView.selectedTextRange {
let cursorIndex = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start)
atStr.insert(attachmentAtStr, at: cursorIndex)
atStr.addAttributes(self.textView.typingAttributes, range: NSRange(location: cursorIndex, length: 1))
} else {
atStr.append(attachmentAtStr)
}
textView.attributedText = atStr
}