1

我正在从 Web 服务获取数据,结果包含一些 HTML 标记,然后我正在尝试对其进行转换。例如,我想<P>用换行符替换标签,以及<STRONG>从 HTML 到粗体文本。

谁能帮我?我已经想出了如何替换文本——我想我已经完成了一半。

 if([key isEqualToString:@"Description"]){
            txtDesc.text=[results objectForKey:key];
            NSString * a = txtDesc.text;

            NSString * b = [a stringByReplacingOccurrencesOfString:@"<strong>" withString:@"STRONG TAG"];
            b =  [b stringByReplacingOccurrencesOfString:@"<\\/p>" withString:@""];
            b =  [b stringByReplacingOccurrencesOfString:@"</p>" withString:@""];

            txtDesc.text=b;

        }
4

2 回答 2

4

字符串没有粗体等属性。字符串仅包含字符,包括换行符。如果你想用属性丰富你的字符串,看看 NSAttributedString。

更新:对于我们这些看不到的人来说,为什么属性字符串是解决方案,一段简单的代码:

- (NSAttributedString*)attributedStringByReplaceHtmlTag:(NSString*)tagName withAttributes:(NSDictionary*)attributes
{
    NSString *openTag = [NSString stringWithFormat:@"<%@>", tagName];
    NSString *closeTag = [NSString stringWithFormat:@"</%@>", tagName];
    NSMutableAttributedString *resultingText = [self mutableCopy];
    while ( YES )   {
        NSString *plainString = [resultingText string];
        NSRange openTagRange = [plainString rangeOfString:openTag];
        if (openTagRange.length==0) {
            break;
        }

        NSRange searchRange;
        searchRange.location = openTagRange.location+openTagRange.length;
        searchRange.length = [plainString length]-searchRange.location;
        NSRange closeTagRange = [plainString rangeOfString:closeTag options:0 range:searchRange];

        NSRange effectedRange;
        effectedRange.location = openTagRange.location+openTagRange.length;
        effectedRange.length = closeTagRange.location - effectedRange.location;

        [resultingText setAttributes:attributes range:effectedRange];
        [resultingText deleteCharactersInRange:closeTagRange];
        [resultingText deleteCharactersInRange:openTagRange];

    }

    return resultingText;
}

但我没有很好地测试它,因为我必须在编程时准备意大利烩饭。;-)

于 2013-05-07T19:09:58.017 回答
0

如前所述,您需要使用 NSAttributedString

它实现了以下方法,您将传递一个属性的 NSDictionary 和一个范围(字符)来接收属性

- (void)setAttributes:(NSDictionary *)attributes range:(NSRange)range;

NSDictionary 的一个例子是:

@{ NSFontAttributeName: [UIFont systemFontOfSyze:24], NSForegroundColorAttributeName: [UIColor greenColor]}

您可以查找有关苹果文档的更多信息 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAttributedString_Class/Reference/Reference.html

或斯坦福大学令人惊叹的iPhone 应用程序开发课程 的第 4 讲http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2013-winter

于 2013-05-07T20:26:02.807 回答