我试图允许textView通过自定义按钮允许子弹点,方法是插入带有NSParagraphStyle属性的NSAttributedString @"\u2022"(unicode ),该属性将headIndent设置设置为特定的点长度以创建缩进。
问题是:一旦我将该属性指向UITextView的attributedString属性,该属性将对所有未来的类型化文本生效。这意味着,如果您转到一个新行(无论是按enter键还是只键入足够多的键来达到textView的水平边界),它将始终被缩进。我确实将该属性赋值给只包含项目点的attributedString,因此我不知道它为什么会对键入的所有其他文本生效。
我想不出删除该属性的任何方法,因为它似乎不再被分配到某个范围,因为它会影响所有未来的文本。我所知道的唯一删除属性的方法是,如果属性具有指定的范围,则使用removeAttribute:range:。
另一个注意事项:该属性不存在于UITextView的typingAttributes属性中。
下面是代码:
NSMutableAttributedString *bulletString = [[NSMutableAttributedString alloc]initWithString:@"\u2022"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc]init];
[style setFirstLineHeadIndent:25.0];
[bulletString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0.0, [bulletString.string length])];
NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:self.textView.attributedText];
[textViewText appendAttributedString:bulletString];
self.textView.attributedText = textViewText;汇总:将NSParagraphStyle属性附加到textView文本的NSAttributedString。属性会影响所有未来输入的文本,尽管它在创建时被分配到特定的范围。
发布于 2013-05-24 00:09:02
首先,段落风格适用于段落。段落由换行符(或字符串的开头或结尾)之间的所有字符组成。段落风格是由段落的第一个字符的有效风格定义的。因此,在本文中:
A bcdef
G hijkl只有有效的段落风格适用于A和G问题。其余的都无关紧要。
其次,当您向属性化字符串插入或追加字符时,新文本将接受周围文本的属性。具体来说,在您的情况下,当用户附加到属性化字符串时,最后一个字符的有效属性将应用于附加字符。
因此,您需要追加@"\u2022"并为其分配一些属性。然后有人键入“A”现在A和子弹一样具有相同的属性。继续。
您需要确保段落样式在下一段开始之前从文本中删除。可能最简单的方法是观察用户输入换行符,并在此时指定您想要的新段落样式。另一种方法是插入@"\u022\t" (即在项目后添加一个选项卡)。然后将您的段落样式分配给项目,并将其从选项卡中删除。
但是,在任何情况下,用户都可以在文本中移动,并扰乱您的段落样式。您可能需要跟踪它们并在textViewDidChange:中正确地重新应用它们。
https://stackoverflow.com/questions/16722931
复制相似问题