Всем привет!
Есть UITextView, в котором текст присваивается через .attributedText.
NSAttributedString инициализируется с Data (берем с чтения файла, в котором html). При инициализации NSAttributedString указываем documentType - html.
var HTMLdata:Data?{
didSet{
guard let data = self.HTMLdata else {return}
do{
let attributed = try NSAttributedString(data: data, options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html], documentAttributes: nil)
textView.attributedText = attributed
}catch{
return
}
}
}
На этом этапе все работает хорошо, NSAttributedString распознает html теги, применяет к ним стили, записанные в html.
Но, следующий этап - найти ссылку, и проскролить UITextView к ссылке. Ссылка (тэг a пустой)
Пример куска HTML:
<p class=main-text><a name="link5"></a>
<span class=main-text-span>Название</span> абзаца</p>
Нужно найти a с name "link5" и проскролить к ней.
Так как NSAttributedString уже прочитал HTML, уже отсутствует в attributed.string, и соответственно результатом выполнения:
let range = attributed.string.range(of: #"<a name="link5"></a>"#) // -> nil
будет nil
Если же инициализировать String с Data(HTML), то range не будет nil, но при textView.scrollRangeToVisible() будет отображаться вообще левый кусок, так как в String будут "не отрендеренные" теги, соответственно length и location в NSRange будут намного больше чем в attributed.string.
Как мне найти правильный NSRange?