Я применяю настраиваемый атрибут для выделенного текста, который работает нормально, но когда я изменяю текст в примененном атрибутном тексте, вновь введенный текст не имеет настраиваемого атрибута.Если это стандартное поведение, то что я должен сделать для достижения желаемого поведения.
Что я делаю:
- Введите текст в UiTextView, например: "Это образецtext "
- Выделить весь текст
- Применить настраиваемый атрибут
- Текст атрибута журнала
Вывод журнала
Thisобразец текста {MyCustomAttributeKey = CustomAttributeValue;NSFont = "font-family: \". SFUIText \ "; font-weight: normal; font-style: normal; font-size: 14.00pt";NSParagraphStyle = "Выравнивание 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, вкладки (\ n 28L, \ n 56L, \ n 84)n 112L, \ n
140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n
308L, \ n 336L \ n), DefaultTabInterval 0, блоки (\n), списки (\ n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0 ";}
Теперь вставьте текст между текстом, например, «измененный», полный текст после изменения: «Это измененный образец текста» Логотип текста
Теперь яполучаю вывод журнала (журнал отформатирован для ясности)
Это {MyCustomAttributeKey = CustomAttributeValue;NSFont = "font-family: \". SFUIText \ "; font-weight: normal; font-style: normal; font-size: 14.00pt";NSParagraphStyle = "Выравнивание 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, вкладки (\ n 28L, \ n 56L, \ n 84)n 112L, \ n 140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n 308L, \ n 336L \ n), DefaultTabInterval 0, блоки (\ n), списки (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0 ";}
изменение {NSFont = "font-family: \". SFUIText \ "; font-weight: normal; font-style: normal; font-size: 14.00pt";NSParagraphStyle = "Выравнивание 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, вкладки (\ n 28L, \ n 56L, \ n 84)n 112L, \ n 140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n 308L, \ n 336L \ n), DefaultTabInterval 0, блоки (\ n), списки (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0 ";}
образец текста {MyCustomAttributeKey = CustomAttributeValue;NSFont = "font-family: \". SFUIText \ "; font-weight: normal; font-style: normal; font-size: 14.00pt";NSParagraphStyle = "Выравнивание 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, вкладки (\ n 28L, \ n 56L, \ n 84)n 112L, \ n 140L, \ n 168L, \ n 196L, \ n 224L, \ n 252L, \ n 280L, \ n 308L, \ n 336L \ n), DefaultTabInterval 0, блоки (\ n), списки (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0 ";}
Мой ожидаемый вывод - применить пользовательский атрибут ко вновь введенному тексту, но это не так.Как этого добиться?
Заранее спасибо.
Мой ViewController и код:
// ViewController.swift
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
let customAttributeStringKey: NSAttributedStringKey = NSAttributedStringKey.init(rawValue: "MyCustomAttributeKey")
@IBOutlet weak var textV: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func applyCustomAttribute(_ sender: Any) {
let attributedString : NSMutableAttributedString = textV.attributedText.mutableCopy() as! NSMutableAttributedString
attributedString.addAttribute(customAttributeStringKey, value: "CustomAttributeValue", range:textV.selectedRange)
textV.attributedText = attributedString
}
@IBAction func logAttribute(_ sender: Any) {
print(textV.attributedText.description)
}
}
PS: Экспериментировал с использованием NSAttributedStringKey.underlineStyle (вместо пользовательского атрибута),
attributedString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range:textV.selectedRange)
, в этом случае измененный текст также получает атрибут underlineStyle, тогда в чем проблема с customAttribute?
Редактировать: прогресс
Я попытался установить атрибуты набора в методе прослушивания textview, как показано ниже, это частично работает ... но есть но
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if(isApplyAttributesClicked){ //this flag is true when we have applied attributes by clicking Apply attribute button
textV.typingAttributes = [customAttributeStringKey.rawValue:"CustomAttributeValue"]
}
return true
}
Но теперь проблема в том, что всякий раз, когда прогноз или автокоррекция выбирается с клавиатуры, затем следующийТипизированный атрибут печатного слова не имеет пользовательского атрибута.Любая помощь будет оценена.