如何为UITextView中的每个段落添加不同的headIndent(alignment)

时间:2014-04-22 09:58:07

标签: ios objective-c uitextview nsattributedstring

在我的应用程序中,我需要以不同方式对齐所有段落

首先,第一段的 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];
 }

我希望在文本视图中获得此类结果

enter image description here

当我输入时,输入也会变慢。

但我想我会回答这个问题但是现在我坚持这个对齐问题。

当子弹点到来时以及当不同的文字出现时如何做到这一点。

任何类型的链接,代码,教程都会有很大的帮助......

----------编辑:----------

请查看 Evernote 的申请 我需要在我的应用程序中执行完全相同的操作。当子弹来时,对齐第二,第三等线。

--------搜索后编辑:-------

我为此搜索了太多但是没有通过谷歌搜索找到任何东西 所以,现在我问是否有人现在关于如何给段落提供任何段落样式或任何属性样式,只是将它保留在文本视图中,然后在第二段上执行其他段落样式。此时第一段不会传递抛出“shouldChangeTextInRange”方法。

是的,无论我说什么都很混乱。

所以我一般来解释一下......

如果用户设置了文本视图的第一个段落的headIndent = 7.0f,那么当用户输入下一个段落并设置headIndent = 13.0f时,第一个段落将保留在textview中,只是运行段落将进入章节(在方法中表示)。

现在我在 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 个答案:

答案 0 :(得分:3)

试试这个:

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];

对于要点,这是不同的东西。您需要找到项目符号的位置,并相应地设置另一个缩进。