#iphone #objective-c #uitextview #nsattributedstring
#iPhone #objective-c #uitextview #nsattributedstring
Вопрос:
В моем приложении мне нужно установить некоторый межстрочный интервал в текстовом представлении пользовательского интерфейса..
Я знаю, что мы можем сделать это для не редактируемых текстовых представлений / меток, используя интервал в стиле абзаца
Но в моем приложении, когда я ввожу текст, он не работает,
Я могу сделать это только тогда, когда у меня есть заранее определенный текст, если после очистки текстового абзаца sty не будет работать
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 35.f;
paragraphStyle.maximumLineHeight = 35.f;
UIFont *font = [UIFont fontWithName:@"AmericanTypewriter" size:18.f];
NSString *string = @"This is a test";
NSDictionary *attributtes = @{
NSParagraphStyleAttributeName : paragraphStyle,
};
deedTextView.font = font;
deedTextView.attributedText = [[NSAttributedString alloc] initWithString:string
attributes:attributtes];
Но у меня нет заранее определенного текста, например NSString *string = @"This is a test";
Текстовое представление должно быть пустым, в то время как begin
Ответ №1:
У меня была такая же проблема. Основываясь на ответе Sergius, я придумал следующее рабочее решение. Проблема с ответом Sergius заключалась в том, что все остальные уже установленные атрибуты будут перезаписаны (шрифт, цвет …)
Поэтому лучше отредактировать существующие атрибуты typingAttributes:
NSDictionary* d = deedTextView.typingAttributes;
NSMutableDictionary* md = [NSMutableDictionary dictionaryWithDictionary:d];
[md setObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
deedTextView.typingAttributes= md;
Ответ №2:
Один простой вариант, который приходит на ум, заключается в следующем.
Используя один из этих 2 методов UITextViewDelegate
, вы можете добиться желаемого:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
- (void)textViewDidChange:(UITextView *)textView;
Ваш алгоритм следующий — возьмите textView.text
, преобразуйте его в соответствии с вашими потребностями и установите textView.text
как textView.attributedText
Вы также можете попробовать установить это:
deedTextView.typingAttributes = [NSDictionary dictionaryWithObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
Комментарии:
1. Я пробовал, это не работает, каждый символ переходит на следующую строку при вводе текста