0

У меня есть в моем swift приложение на UITextView и я настройки шрифта в viewDidLoad:Почему мой шрифт в UITextView меняет стиль без причины в swift?

let font = UIFont(name: "AppleSDGothicNeo-Light", size: 16.0) 

myTextView.font = font 

Это хорошо работает, когда я запустить приложение и записывает что-то в текстовом виде, я вижу:

enter image description here

Теперь у меня есть метод, который проверяет данный текст и находит и подчеркивает hashtags в нем. Метод заключается в следующем:

func formatTextInTextView(textView: UITextView) { 
    textView.scrollEnabled = false 
    let selectedRange = textView.selectedRange 
    let text = textView.text 

    // This will give me an attributedString with the base text-style 
    let attributedString = NSMutableAttributedString(string: text) 

    let regex = try? NSRegularExpression(pattern: "#(\\w+)", options: []) 
    let matches = regex!.matchesInString(text, options: [], range: NSMakeRange(0, text.characters.count)) 

    for match in matches { 
     let matchRange = match.rangeAtIndex(0) 

     let titleDict: NSDictionary = [NSForegroundColorAttributeName: UIColor(red: 244/255, green: 137/255, blue: 0/255, alpha: 1.0), NSFontAttributeName: font!] 

     attributedString.addAttributes(titleDict as! [String : AnyObject], range: matchRange) 
    } 

    textView.attributedText = attributedString 
    textView.selectedRange = selectedRange 
    textView.scrollEnabled = true 
} 

Я добавил этот метод к:

func textViewDidChange(textView: UITextView) { 
    formatTextInTextView(textView) 
} 

и теперь с входом каждого пользователя я динамически проверки, если это хэштегом или нет, и если это - выделяет текст оранжевым цветом. По крайней мере, это должно быть в теории. Таким образом, это происходит, когда метод включен:

Как только я начинаю писать текст:

enter image description here

(это, кажется, как системный шрифт для меня)

и когда я добавить хэштегом:

enter image description here

это работает для хэштегом, но остальная часть текста становится - похоже, - де стиль ошибки. В чем проблема? : |

ответ

1

Необходимо указать желаемый шрифт при первоначальном создании атрибутной строки, а не только для деталей с другим цветом.

func formatTextInTextView(textView: UITextView) { 
    textView.scrollEnabled = false 
    let selectedRange = textView.selectedRange 
    let text = textView.text 

    let titleDict: NSDictionary = [NSFontAttributeName: font!] 

    // This will give me an attributedString with the desired font 
    let attributedString = NSMutableAttributedString(string: text, attributes: titleDict) 

    let regex = try? NSRegularExpression(pattern: "#(\\w+)", options: []) 
    let matches = regex!.matchesInString(text, options: [], range: NSMakeRange(0, text.characters.count)) 

    for match in matches { 
     let matchRange = match.rangeAtIndex(0) 

     let titleDict: NSDictionary = [NSForegroundColorAttributeName: UIColor(red: 244/255, green: 137/255, blue: 0/255, alpha: 1.0)] 

     attributedString.addAttributes(titleDict as! [String : AnyObject], range: matchRange) 
    } 

    textView.attributedText = attributedString 
    textView.selectedRange = selectedRange 
    textView.scrollEnabled = true 
} 
+0

Я попытался добавить 'textView.font = font' в самом начале метода' formatTextInTextView'but, что не работает ... есть что-нибудь еще, что потенциально может работать? – user3766930

+1

Это совсем не то, что я предложил. Вы должны добавить шрифт как свойство во всю строку при создании вашей атрибутной строки. Прямо сейчас вы применяете только шрифт к цветным частям атрибутной строки. – rmaddy

+0

См. Мой обновленный ответ, показывающий полное решение. – rmaddy

Смежные вопросы