Я работаю с выделением определенного символа в данном тексте.
Вот мой рабочий код,
let titleLabel: UILabel!
let myText = "கொக்கு"
let textToHighlight = "க்"
titleLabel.frame = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))
let textStroke: [NSAttributedString.Key : Any] = [
.strokeColor : UIColor.white,
.foregroundColor : UIColor.red,
.strokeWidth : -2.0,
]
let textTitle = NSMutableAttributedString(string: myText)
let textHighlightRange = (myText as NSString).range(of: textToHighlight)
textTitle.addAttributes(textStroke, range: textHighlightRange)
titleLabel.attributedText = textTitle
Другие тексты, с которыми я работал, и получение ожидаемых результатов, но только Несколько слов, указывающих c на тамильских языках, с которыми я сталкиваюсь,
Другие языки Хорошо работали с текстом,
let myText = "MyText"
let textToHighlight = "T"
let myText = "मानक हिन्दी"
let textToHighlight = "न"
Проблемы с текстом
let myText = "கொக்கு"
let textToHighlight = "க்"
Поскольку я гуглил и получил немного подробностей по ссылке NSRange в строках, имеющих диалекты .
Но как найти методы () и advance (), используемые в данной ссылке , Я использую Xcode 11.2 и Swift версии 4
РЕДАКТИРОВАТЬ:
Через долгое время я нашел ближайшее решение для выделения / изменения цвета переднего плана моего совпадающего символа в текст, как показано ниже,
func characterToHighlight(text: String, highlight: String) -> NSAttributedString? {
guard let match = try? NSRegularExpression(pattern: highlight, options: .caseInsensitive) else {
return nil
}
let textStroke: [NSAttributedString.Key : Any] = [
.strokeColor : UIColor.white,
.foregroundColor : UIColor.red,
.strokeWidth : -2.0,
]
let attributedString = NSMutableAttributedString(string: text)
match
.matches(in: text, options: .withTransparentBounds,
range: NSRange(location: 0, length: text.utf16.count))
.forEach {
attributedString.addAttributes(textStroke, range: $0.range)
}
return attributedString
}
if let matchedCharacter = characterToHighlight(text: text, highlight: textToHighlight){titleLabel.attributedText = matchedCharacter}
Этот код работает для совпавших символов тамильских букв в строке, но передний план других букв был черным. Мне нужны несопоставленные символы синего цвета и соответствующие символы красного цвета.
Как этого добиться?
ОТВЕТ:
let titleLabel: UILabel!
let myText = "கொக்கு"
let textToHighlight = "க்"
titleLabel.frame = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))
let textStroke: [NSAttributedString.Key : Any] = [
.strokeColor : UIColor.white,
.foregroundColor : UIColor.blue,
.strokeWidth : -2.0,
]
let highlightTextAttributes: [NSAttributedString.Key : Any] = [
.strokeColor : UIColor.white,
.foregroundColor : UIColor.red,
.strokeWidth : -4.0,
]
let textTitle = NSMutableAttributedString(string: myText)
textTitle.addAttributes(textStroke, range: textHighlightRange)
if let matchedCharacterRange = getRange(text: text, highlight: textToHighlight)
{
textTitle.addAttributes(highlightTextAttributes, range: matchedCharacterRange)
}
titleLabel.attributedText = textTitle
func getRange(text: String, highlight: String) -> NSRange? {
guard let regex = try? NSRegularExpression(pattern: highlight, options: .caseInsensitive) else {
return nil
}
var highlightRange: NSRange?
regex
.matches(in: text, options: .withTransparentBounds,
range: NSRange(location: 0, length: text.utf16.count))
.forEach {
highlightRange = $0.range
}
return highlightRange
}
Я не могу опубликовать свой ответ отдельно, поэтому я редактирую свой вопрос и размещаю ответ в том же виде.
Эксперты, пожалуйста, просмотрите и исправьте меня, если я ошибаюсь.
Спасибо за ваша поддержка.