【问题标题】:UITextView AlternativeUITextView 替代方案
【发布时间】:2012-12-05 15:13:33
【问题描述】:

据我了解,Apple 文档的 UITextView 的属性文本属性:

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

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

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

想要的 效果 要写by 代码

假设标签对应于属性。

附:我不想使用 CATextLayers,因为我正在尝试将 AutoLayout 功能与 UITextView 一起使用。

【问题讨论】:

标签: ios ios6 uitextview nsattributedstring nslayoutconstraint


【解决方案1】:

您可以使用包含您需要的所有属性的 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 将在字符串的整个范围内应用属性,这是您要避免的,很抱歉造成混淆。

【讨论】:

  • 我遇到的问题如下:我有一个带有 3 个 NSMutableAttributedString 属性的 UITextView 子类。我在应用程序的给定阶段将属性字符串附加到这些属性,并且在每次附加操作之后,我将 UITextView 子类的属性文本更改为我用来附加新属性字符串的属性。如果我对属性执行 NSLog,我会看到来自我附加的 NSAttributedStrings 的属性,但是在该操作之后将属性设置文本设置为我使用的属性与您在上面发布的代码的效果不同。任何想法为什么?
  • 刚刚从我在第一个问题中写的内容中再次返回到 Apple 文档来解决问题所在。为其分配一个新值...字体、textColor 和 textAlignment 属性中的值,以便它们反映属性字符串中从位置 0 开始的样式信息。因此,对我来说,解决方案是提供每个 NSAttributedStrings 我要附加它们的属性,并确保不要将属性数组留空。谢谢你的帮助@hewas
猜你喜欢
  • 1970-01-01
  • 2012-10-05
  • 2010-09-10
  • 2013-11-22
  • 2020-11-23
  • 2013-08-07
  • 2015-09-11
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多