Сделайте изображение кликабельным в UITextView - PullRequest
0 голосов
/ 27 марта 2020

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

В настоящее время я разместил распознаватель жестов касания над UITextView, который вызывает:

    @IBAction func onImageTap(_ sender: UITapGestureRecognizer) {
        if sender.state == .ended {
            let textView = sender.view as! UITextView
            let layoutManager = textView.layoutManager

            // location of tap in textView coordinates
            var location = sender.location(in: textView)
            location.x -= textView.textContainerInset.left;
            location.y -= textView.textContainerInset.top;

            // character index at tap location
            let characterIndex = layoutManager.characterIndex(for: location, in: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

            // if index is valid
            if characterIndex < textView.textStorage.length {

                // check if the tap location has the image attribute
                let attributeValue = textView.attributedText.attribute(NSAttributedString.Key.fileType, at: characterIndex, effectiveRange: nil) as? String
                // if location does have custom attribute, extract the url of the PDF and perform segue to display PDF
                if let value = attributeValue {
                    if value == "PDF" {
                        storedFileName = textView.attributedText.attribute(NSAttributedString.Key.fileName, at: characterIndex, effectiveRange: nil) as? String
                        performSegue(withIdentifier: "displayPDF", sender: textView)
                    }
                } else {
                    textView.isEditable = true
                    textView.becomeFirstResponder()
                }
            }
        }
    }

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

Что я делаю, чтобы изображения оставались интерактивными, но, если я щелкаю где-нибудь еще в UITextView, я я могу начать редактирование текста?

1 Ответ

0 голосов
/ 28 марта 2020

Предполагая, что вы добавили изображение в UITextView как NSAttachment, начиная с iOS 9.0 вы можете проверить, содержит ли данный NSRange вложение:

Например, если изображение было расположено на 25-м символе:

let characterIndex = 25
let range = NSRange(location: characterIndex, length: 1)

// Using an IBOutlet in the current view controller called 'textView'
if textView.attributedText.containsAttachments(in: range) {
    // Do some activity
}
...