Как поставить разные 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];

С точки зрения пули, это что-то другое. Вам нужно найти точку с маркером и установить другой отступ соответственно.

Другие вопросы по тегам