UITextView替代

正如我从Apple Docs UITextView的attributesText属性理解:

该属性默认为零。 为这个属性指定一个新的值也可以用相同的string数据replacetext属性的值,尽pipe没有任何格式化信息。 另外,赋值一个新值将更新字体,textColor和textAlignment属性中的值,以便它们反映属性string中从位置0开始的样式信息。

因此,我不能通过具有多个属性的代码在不同位置添加属性string。

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

<'font systemFontOfSize = 18> 期望的 </ font> 效果 <'textColor = [UIColor redColor]> 被写入b <'/ textColor> y代码

假设标签对应于属性。

PS我不想使用CATextLayers,因为我想用UITextView的AutoLayoutfunction。

你可以用NSDictionary构build一个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; 

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

更新
使用NSMutableAttributedString示例。 NSAttributedString's initWithString:attributes会在string的整个范围内应用属性,这就是你想要避免的,对于混淆抱歉。