2013-03-24 74 views
15

我有一个视图,其唯一的UI元素是UITextView。在viewDidLoad:我创建一个属性串用“文字\ n”,并设置文本视图的属性文本这样:NSAttributedString' n'ignored

NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"Text\n"]; 
[self.textView setAttributedText:string]; 

我的问题是,当我运行应用程序的换行符被忽略。

如果我使用的NSStringsetText:不会发生。

NSString *string = [[NSString alloc] initWithString:@"Text\n"]; 
[self.textView setText:string]; 

任何人都可以阐明发生了什么吗?我似乎无法在文档或其他方面找到任何内容。

回答

5

您可以使用此:

NSAttributedString *cr = [[NSAttributedString alloc] initWithString: @"\n"]; 

所以,如果你有两个NSAttributedString(字符串1和字符串),你可以这样做:

[string1 appendAttributedString: cr]; 
[string1 appendAttributedString: string2]; 

这太可怕了,而不是优雅的....但有用!!!

+0

'NSAttributedString'不能使用'appendAttributedString',因为它不能被改变。是否正确使用'NSMutableAttributedString'? – Penguin 2015-12-26 10:07:12

2

我会建议你使用:

[[NSAttributedString alloc] initWithHTML:[@"Text<BR />" dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:NULL]; 

我用这一切的时候,它完美的作品。我甚至做了一个宏观出来的:

#define html2AttributedString(htmlString)                 \ 
    [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]   \ 
    documentAttributes:NULL] autorelease] 

然后,你可以为颜色,对齐,字体等宏观...

总之,你只需要更换所有"\n"在你的字符串与<BR />并使用上面提供的代码。对于更换部件,使用方法:

[yourString stringByReplacingOccurrencesOfString:... withString:…]; 

在iOS设备上,你可以检查出this page中,他们给你更换。

我们的initWithHTML方法旨在完美地匹配Mac版本的 的输出。这是可能实现的字符,我有 单位测试,以确保这一直保持完美。 关于属性,有许多事情必须做到 在iOS上略有不同,以实现相同的外观。我不会打扰你 在那里的细节。

+1

'initWithHTML:'方法在iOS中不可用。 – rmaddy 2013-03-24 03:05:24

+0

没错。我编辑了这篇文章,提供了一个替代品。 – Jean 2013-03-24 03:14:26

+0

在这一点上,我更关心的是为什么我没有得到预期的行为,但如果最终不得不解决这个问题,我会牢记这一点。 – winsome 2013-03-24 03:38:42