如何清除UITextView ...真实

时间:2014-02-12 14:48:13

标签: ios iphone ios7 uitextview nsattributedstring

我很惭愧承认我不知道如何清除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;
}

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

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

5 个答案:

答案 0 :(得分:6)

这个糟糕的黑客做到了诀窍:

self.textView.text = @"Something, doesn't matter what as long as it's not empty";
self.textView.text = @"";

但是,确定这是一个错误还是预期的行为会很好。我在文档中找不到任何关于它的内容。

答案 1 :(得分:2)

textView.text=@"";
[textView insertText:@""];

试试这个!

答案 2 :(得分:1)

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

答案 3 :(得分:1)

在我的应用程序中,我看到hpique建议的黑客表现不佳:

self.textView.text = @"Something, doesn't matter what as long as it's not empty";
self.textView.text = @"";

第一行强制UITextView再次布局所有内容。如果在重用的单元格中使用UITextView(例如在UITableView中),这是非常昂贵的。

在iOS 8及更高版本中,我发现在我的UITextView子类上使用以下重置方法更加高效:

- (void)reset
{    
    self.text = nil;
    self.font = nil;
    self.textColor = nil;
    self.textAlignment = NSTextAlignmentLeft;
}

答案 4 :(得分:0)

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

let textView = UITextView()
let attributes: [NSAttributedString.Key: Any] = [
    .font: UIFont.systemFont(ofSize: 16, weight: .regular),
    .foregroundColor: UIColor.black,
]
textView.typingAttributes = attributes