Как поставить разные headIndent (выравнивание) для каждого абзаца в UITextView
В моем приложении мне нужно выровнять весь абзац по- разному.
Например, headIndent первого абзаца равен 0.0f, затем 10.0f, а третьего - 3.0f.
Я даю весь стиль абзаца для textview.attributedText. и это заняло только один стиль.
Здесь весь текст будет приходить динамически, набрав. означает, когда пользователь будет вводить текстовое представление в то время. поэтому для этого нет статической строки.
Я помещаю все символы в UITextView этим...
UIFont *fontBold = [UIFont fontWithName:@"Helvetica-Bold" size:15];
attributesHelveticaBold = @{NSFontAttributeName :fontBold};
UIFont *fontNormal = [UIFont fontWithName:@"HelveticaNeue-Light" size:15];
attributesNormal = @{NSFontAttributeName :fontNormal};
if (varBold== 1) {
[textView setTypingAttributes:attributesHelveticaBold];
}
else {
[textView setTypingAttributes:attributesNormal];
}
И я хочу получить такой результат в текстовом представлении
Когда я печатаю, печатание становится медленным.
но я думаю, что приду к этой проблеме, но пока я застрял на этой проблеме выравнивания.
как это сделать, когда придет пуля и когда придет другой текст.
любая ссылка, код, учебник будет отличной помощью...
---------- Редактировать: ----------
Пожалуйста, посмотрите в приложении Evernote.
Мне нужно сделать то же самое в моем приложении. для выравнивания второй, третьей и т. д. линии при появлении пули.
-------- Изменить после поиска: -------
Я искал слишком много для этого, но ничего не нашел, прибегая к помощи.
Итак, теперь я спрашиваю, если кто-нибудь сейчас о том, как дать любой стиль абзаца или любой стиль атрибута абзацу и просто оставить его как есть в текстовом представлении, а затем выполнить другой стиль абзаца для второго абзаца. в это время первый абзац не будет проходить методом throw "shouldChangeTextInRange".
да, это довольно запутанно, что бы я ни говорил.
так я объяснил это в общем...
если пользователь установил headIndent=7.0f первого абзаца текстового представления, то когда пользователь введет следующий абзац и установит headIndent = 13.0f, тогда первый абзац останется таким же, как в текстовом представлении, и просто запущенный абзац появится в главе (значит, в методе).
сейчас я делаю эти вещи в методе shouldChangeTextInRange, чтобы сделать стиль для каждого абзаца.
varStaringPointOfString = 0;
varEndingPointOfString = 0;
NSArray *sampleArrToGetattrStr = [txtViewOfNotes.text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
for (int i=0; i<[sampleArrToGetattrStr count]; i++)
{
NSString *strtostoreLength = [NSString stringWithFormat:@"%@",[sampleArrToGetattrStr objectAtIndex:i]];
varStaringPointOfString = (int)strtostoreLength.length + varEndingPointOfString;
if ([strtostoreLength hasPrefix:@"\t•\t"])
{
[[textView textStorage] addAttribute:NSParagraphStyleAttributeName value:paragraphStyleForBullet range:NSMakeRange(varEndingPointOfString, strtostoreLength.length)];
}
else
{
[[textView textStorage] addAttribute:NSParagraphStyleAttributeName value:paragraphStyleNormal range:NSMakeRange(varEndingPointOfString, strtostoreLength.length)];
}
varEndingPointOfString = varStaringPointOfString;
strtostoreLength =@"";
}
но из-за этого скорость набора текста становится очень медленной.
1 ответ
Попробуй это:
NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init];
[paragraphStyle setFirstHeadLineHeadIndent:firstLineIndend]; //Only the first line
[paragraphStyle setHeadIndent:headIndent]; //The rest of the lines, except the first one
[yourAttributedString addAttribute:NSParagraphStyleAttributeName
value:paragraphStyle
range:paragraphRange];
С точки зрения пули, это что-то другое. Вам нужно найти точку с маркером и установить другой отступ соответственно.