如何真正清除UITextView…>

问题描述 投票:6回答:5

我很to愧承认我不知道如何清除UITextView

通过清除,我的意思是将其文本保留为空白并删除其所有属性。我以为将其设置为nil就足够了,但是第一个字符的属性仍保留在那里,静默等待直到再次键入要添加的内容。

例如,以下代码具有香草色UITextView,可以双击(doubleTapAction:)将其清除。加载后,我添加了一个自定义属性,当清除UITextView时也应删除该属性。

@implementation HPViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"test"];
    [attributedString addAttributes:@{@"attribute" : @"value"} range:NSMakeRange(0, 1)];
    self.textView.attributedText = attributedString;
}

- (IBAction)doubleTapAction:(id)sender
{
    self.textView.text = nil;
    // Also tried:
    // self.textView.text = @"";
    // self.textView.attributedText = nil;
    // self.textView.attributedText = [[NSAttributedString alloc] initWithString:@""];
}

- (void)textViewDidChange:(UITextView *)textView
{
    NSLog(@"%@", textView.attributedText);
}

@end

清除UITextView,然后输入字母“ d”将记录以下内容:

d{
    NSFont = "<UICTFont: 0x8a7e4e0> font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n    28L,\n    56L,\n    84L,\n    112L,\n    140L,\n    168L,\n    196L,\n    224L,\n    252L,\n    280L,\n    308L,\n    336L\n), DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection 0, HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0";
    attribute = value;
}

我的自定义属性仍然存在!

这是错误还是预期的行为?

我很to愧承认我不知道如何清除UITextView。通过清除,我的意思是将其文本保留为空白并删除其所有属性。我以为将它设置为nil就足够了,但是...

ios iphone ios7 uitextview nsattributedstring
5个回答
8
投票

这个可怕的技巧可以解决问题:


3
投票
textView.text=@"";
[textView insertText:@""];

1
投票

您必须手动将字体,文本颜色等重置为默认值。设置attributedText总是将UITextView的“全局”属性设置为属性字符串中第一个字母的属性。


1
投票

在我的应用程序中,我发现hpique提出的黑客攻击性能较差:


0
投票

在这种情况下,有一个属性很有用。是typingAttributes

© www.soinside.com 2019 - 2024. All rights reserved.