【问题标题】:NSAttributedString '\n' ignoredNSAttributedString '\n' 被忽略
【发布时间】:2013-03-24 02:22:24
【问题描述】:

我有一个单一的视图,其唯一的 UI 元素是 UITextView。在viewDidLoad: 中,我使用“Text\n”创建了一个属性字符串,并将文本视图的属性文本设置为:

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

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

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

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

任何人都可以了解正在发生的事情吗?我似乎在文档或其他方面找不到任何东西。

【问题讨论】:

    标签: ios ios6 uitextview nsattributedstring end-of-line


    【解决方案1】:

    你可以用这个:

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

    所以如果你有两个 NSMutableAttributedString(string1 和 string2)你可以这样做:

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

    这很糟糕而且不优雅....但它有效!!!

    【讨论】:

    • NSAttributedString 不能使用appendAttributedString,因为它无法更改。使用NSMutableAttributedString是否正确?
    【解决方案2】:

    我建议你使用:

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

    我一直都在使用它,而且效果很好。我什至用它做了一个宏:

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

    然后,您可以为颜色、对齐方式、字体等制作宏…

    简而言之,您只需将字符串中的所有"\n" 替换为&lt;BR /&gt; 并使用上面提供的代码。对于替换部件,请使用:

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

    对于 iOS,您可以查看 this page,他们会在其中为您提供替代品。

    我们的 initWithHTML 方法旨在完美匹配 Mac版。这对于角色来说是可能实现的,我有 单元测试到位,以确保它保持完美。 关于属性有很多事情要做 在 iOS 上略有不同以实现相同的外观。我不会打扰你 那里有详细信息。

    【讨论】:

    • “initWithHTML:”方法在 iOS 中不可用。
    • 此时我更关心理解为什么我没有得到预期的行为,但如果我最终不得不解决它,我会记住这一点。
    • @winsome 然后,您可以检查以下方面:属性字符串的段落配置,或者您的 UITextView 的配置。查看本文档第 29 页及之后的内容developer.apple.com/library/mac/documentation/cocoa/conceptual/…
    • 太棒了!这应该是选定的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2016-06-05
    相关资源
    最近更新 更多