UITextView Alternative

时间:2012-12-18 12:01:45

标签: ios ios6 uitextview nsattributedstring nslayoutconstraint

正如我从Apple docs UITextView的attributesText属性中所理解的那样:

  

默认情况下,此属性为零。为此属性分配新值也会使用相同的字符串数据替换text属性的值,尽管没有任何格式信息。此外,分配新的值会更新font,textColor和textAlignment属性中的值,以便它们反映从属性字符串中的位置0开始的样式信息。

因此,我无法通过在不同位置具有多个属性的代码添加一个attributionString。

有人可以帮我用iOS6中的代码创建以下效果吗?这可以使用nib文件和更改UITextView中文本部分的范围属性,但我似乎无法通过代码重现效果。

<'font systemFontOfSize = 18> 所需<'/ font> 效果<'textColor = [UIColor redColor]> 要写b <'/ textColor> y code

假设标签对应于属性。

P.S。我不想使用CATextLayers,因为我试图在UITextView中使用AutoLayout功能。

1 个答案:

答案 0 :(得分:4)

您可以使用包含所需所有属性的NSDictionary构建NSAttributedString:

NSAttributedString* attString = [[NSAttributedString alloc] 
               initWithString: @"Desired effect to be written by code" 
                   attributes: (NSDictionary*)attributes];

或者使用它的可变子类NSMutableAttributedString:

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc]  
               initWithString: @"Desired effect to be written by code"];

    [attString addAttribute: NSForegroundColorAttributeName 
                      value: [UIColor redColor] 
                      range: NSMakeRange(15,15)];

...等
然后...

myTextView.attributedText = attString;

每个属性都应用于字符串的NSRange(位置,长度)。不同的属性类型(例如颜色,字体大小)可以重叠不同的范围。

<强>更新
使用NSMutableAttributedString示例。 NSAttributedString's initWithString:attributes将在字符串的整个范围内应用属性,这是您要避免的,抱歉混淆。