Я пытаюсь ввести различные стили текста в UITextView, немного как текстовый редактор, используя простые атрибуты, такие как полужирный или курсив. Я понимаю, используя свойство textView attributedText
, я могу применять атрибуты к определенным диапазонам текста. Это хорошо, но я хотел бы иметь возможность набирать атрибутный текст в textView, который был бы переключен кнопкой (например, набрав жирный текст).
Вот что я думал до сих пор:
Я использовал метод делегата -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
UITextView, чтобы принять аргумент text
и изменить его с помощью атрибутов, создав NSAttributedString с тем же текстом. Затем создайте NSMutableAttributedString, который является копией textView
attributedText. Добавьте два с помощью appendAttributedString
, а затем установите свойство textView attributedText
в результирующую атрибутную строку.
Здесь код:
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if (self.boldPressed) {
UIFont *boldFont = [UIFont boldSystemFontOfSize:self.textView.font.pointSize];
NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithString:text attributes:boldAttr];
NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:textView.attributedText];
[textViewText appendAttributedString:attributedText];
textView.attributedText = textViewText;
return NO;
}
return YES;
}
При использовании reset textViews attribittedText каждый раз, когда набирается символ, кажется немного для простого действия. Не только это, но и не работает должным образом. Вот как это выглядит, когда включен жирный атрибут:
Есть две проблемы с этим. Наиболее очевидным является то, как каждый новый символ помещается в новую строку. Но также странно, что точка вставки всегда находится в самом первом индексе текста в текстовом виде (только если жирный шрифт включен, но жирный шрифт вставлен в новую строку). Поэтому, если вы печатаете полужирным шрифтом, а затем отключаетесь, набирайте текст перед всем существующим текстом.
Я не уверен, почему эти ошибки происходят. Я также просто не думаю, что мое решение очень эффективно, но я не могу придумать другого способа его реализации.