Как создать случайную строку с несколькими форматами? - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужно создать случайную строку с форматом, который может преобразовать любую строку (включая круглые скобки () в другой цвет при быстром: например:

Эй (Эй): Первая часть 'Эй' в порядке,но я хочу изменить: (Эй) на другой цвет то же самое идет, если я выберу другую строку

Привет (Что случилось) ....

И попробовал следующее

let label = UILabel(frame: CGRect(origin: .zero, size: CGSize(width: 200, height: 50)))

let color = UIColor(white: 0.2, alpha: 1)
let attributedTextCustom = NSMutableAttributedString(string: "(\(String())", attributes: [.font: UIFont(name:"AvenirNext-Medium", size: 16)!, .foregroundColor: color]))
attributedTextCustom.append(NSAttributedString(string: " (\(String())", attributes: [.font: UIFont(name: "AvenirNext-Regular", size: 12)!, .foregroundColor: UIColor.lightGray]))
label.attributedText = attributedTextCustom

Примерно так выглядит поведение, которое я ищу (просто для демонстрации ...):

enter image description here

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать регулярное выражение "\\((.*?)\\)", чтобы найти диапазон слова в скобках и добавить атрибут цвета к NSMutableAttributedString:

let label = UILabel(frame: CGRect(origin: .zero, size: CGSize(width: 200, height: 50)))
let sentence = "Hello (Playground)"
let mutableAttr = NSMutableAttributedString(string: sentence, attributes: [.font: UIFont(name:"AvenirNext-Medium", size: 16)!, .foregroundColor: UIColor.black])

if let range = sentence.range(of: "\\((.*?)\\)", options: .regularExpression) {
    let color = UIColor(white: 0.2, alpha: 1)
    let attributes: [NSAttributedString.Key: Any] = [.font: UIFont(name:"AvenirNext-Medium", size: 16)!, .foregroundColor: color]
    mutableAttr.addAttributes(attributes, range: NSRange(range, in: sentence))
    label.attributedText = mutableAttr
}
...