Как добавить изображение/кнопку в UITextView? С автоматическим разрывом строки?

Я хочу добавить изображение/кнопку в свой UITextView, и текст должен автоматически делать разрыв строки, который соответствует изображению/кнопке.

Второй вопрос. Я хочу сделать кнопку под названием «переместить изображение/кнопку», а затем пользователь может переместить изображение/кнопку через UITextView, а текст должен быть adjust.

PS: как в «Страницах» для Mac или «Word» для Windows


person cocos2dbeginner    schedule 23.01.2011    source источник


Ответы (2)


Это решительно нетривиально. Во-первых, вы не можете просто встроить UIImage внутрь UITextView, и даже если бы вы могли, текст не обтекал бы его волшебным образом. Что вам нужно сделать, так это создать свой собственный объект на основе UITextView, который существенно расширяет свои возможности для предоставления таких инструментов редактирования.

Для получения информации о том, во что вы ввязываетесь, вы можете взглянуть на пример исходного кода текстового редактора от Omni Group.

person John Parker    schedule 23.01.2011
comment
ок большое спасибо за помощь. Возможно, это действительно много для меня. Mayby я могу найти другое решение для него. - person cocos2dbeginner; 23.01.2011

Используйте свойство attributedText UITextView с NSAttributedString с NSTextAttachment с изображением. Обратите внимание, что UITextView должно быть Selectable (в раскадровке).

Быстрая демонстрация:

let attributedImage = NSAttributedString(with: #imageLiteral(resourceName: "myImage"))
let attributedText = NSMutableAttributedString(string: "Hello ")
attributedText.append(attributedImage)
textView.attributedText = attributedText

Где attributedImage построен из этих удобных инициализаторов:

extension NSAttributedString {
    convenience init(with image: UIImage) {
        self.init(attachment: NSTextAttachment(with: image))
    }
}
extension NSTextAttachment {
    convenience init(with image: UIImage) {
        self.init()
        self.image = image
        // adjust origin if needed
        self.bounds = CGRect(origin: .zero, size: image.size)
    }
}

Это решение работает для: iOS 7.0, macOS 10.11, tvOS 9.0, *.

person Cœur    schedule 22.03.2018