首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从文本视图的NSParagraphStyle中删除attributedText属性?

如何从文本视图的NSParagraphStyle中删除attributedText属性?
EN

Stack Overflow用户
提问于 2013-05-23 20:06:21
回答 1查看 2.3K关注 0票数 4

我试图允许textView通过自定义按钮允许子弹点,方法是插入带有NSParagraphStyle属性的NSAttributedString @"\u2022"(unicode ),该属性将headIndent设置设置为特定的点长度以创建缩进。

问题是:一旦我将该属性指向UITextView的attributedString属性,该属性将对所有未来的类型化文本生效。这意味着,如果您转到一个新行(无论是按enter键还是只键入足够多的键来达到textView的水平边界),它将始终被缩进。我确实将该属性赋值给只包含项目点的attributedString,因此我不知道它为什么会对键入的所有其他文本生效。

我想不出删除该属性的任何方法,因为它似乎不再被分配到某个范围,因为它会影响所有未来的文本。我所知道的唯一删除属性的方法是,如果属性具有指定的范围,则使用removeAttribute:range:

另一个注意事项:该属性不存在于UITextView的typingAttributes属性中。

下面是代码:

代码语言:javascript
复制
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。属性会影响所有未来输入的文本,尽管它在创建时被分配到特定的范围。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 00:09:02

首先,段落风格适用于段落。段落由换行符(或字符串的开头或结尾)之间的所有字符组成。段落风格是由段落的第一个字符的有效风格定义的。因此,在本文中:

代码语言:javascript
复制
A bcdef
G hijkl

只有有效的段落风格适用于AG问题。其余的都无关紧要。

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

因此,您需要追加@"\u2022"并为其分配一些属性。然后有人键入“A”现在A和子弹一样具有相同的属性。继续。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16722931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档