将其-6ren">
gpt4 book ai didi

ios - 如何从 textView 的属性文本中删除 NSParagraphStyle 属性?

转载 作者:可可西里 更新时间:2023-11-01 05:55:51 24 4
gpt4 key购买 nike

我试图通过插入 NSAttributedString @"\u2022"(项目符号的 unicode)和 NSParagraphStyle,允许 textView 通过自定义按钮允许项目符号点> 将其 headIndent 设置设置为特定点长度以创建缩进的属性。

问题是这样的:一旦我将该属性项目符号点附加到 UITextView 的 attributedString 属性,该属性就会对所有 future 键入的文本生效。这意味着如果您转到新行(无论是按回车键还是只是键入足以达到 textView 的水平边界),它总是会缩进。我确实将该属性分配给仅包含项目符号点的 attributedString,因此我不知道为什么它会对键入的所有其他文本生效。

我想不出任何删除属性的方法,因为它似乎不再分配给某个范围,因为它会影响所有 future 的文本。我知道删除属性的唯一方法是如果它有一个指定的范围,使用 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 属性的 NSAttributedString 附加到 textView 的文本。属性影响所有 future 键入的文本,尽管在创建时被分配到特定范围。

最佳答案

首先,段落样式适用于段落。一个段落由换行符(或字符串的开头或结尾)之间的所有字符组成。段落样式由段落第一个字符的有效样式定义。所以在这段文字中:

A bcdef
G hijkl

只有应用于 AG 的有效段落样式才重要。其余的无关紧要。

其次,当您将字符插入或附加到属性字符串时,新文本会采用周围文本的属性。具体来说,在您的情况下,当用户附加到属性字符串时,最后一个字符的有效属性将应用于附加字符。

因此,您附加 @"\u2022" 并为其分配一些属性。然后有人输入“A”。现在,A 具有与子弹相同的所有属性。继续。

您需要确保在下一段开始之前的某个时间从文本中删除段落样式。可能最简单的方法是观察用户输入换行符,然后分配您想要的新段落样式。另一种方法是插入 @"\u022\t"(即在项目符号后添加一个制表符)。然后将您的段落样式分配给项目符号并将其从选项卡中删除。

但是,在任何这些情况下,用户都可能在文本中四处移动并弄乱您的段落样式。您可能需要跟踪它们并在 textViewDidChange: 中正确地重新应用它们。

关于ios - 如何从 textView 的属性文本中删除 NSParagraphStyle 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com