5

iOS 7 允许使用 HTML 文件或数据初始化 NSAttributedString。我想使用此功能更轻松地在应用程序的“关于”文本中插入链接。

为此,我使用以下代码初始化 NSAttributedString:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test.html" withExtension:nil];
NSError *error = nil;
NSDictionary *options = nil;
NSDictionary *attributes = nil;
_textView.attributedText = [[NSAttributedString alloc] initWithFileURL:url options:options documentAttributes:&attributes error:&error];

和一个包含以下内容的文件:

<html><body>
<p>This is a <a href=\"http://www.stackoverflow.com\">test link</a>. It leads to StackOverflow.<p>
</body></html>

更新

上面的 HTML 仍然有转义标记,试图在代码中将其用作 NSString。删除逃逸使它工作得很好。下面还回答了我自己的问题。

结束更新

这很好用,并给出了一个带有正确格式和可点击的 url 的字符串。单击该链接会调用 UITextView 的委托 -textView:shouldInteractWithURL:inRange: 方法。但是,检查 URL 参数显示 URL 实际上具有以下绝对字符串:

file:///%22http://www.google.com/%22

这显然没有打开相应的网页。我发现 NSAttributedText 上的文档不够清楚,无法确定发生这种情况的原因。

任何人都知道我应该如何初始化 NSAttributedString 以生成适当的 URL?

4

2 回答 2

1

尝试将 HTML 文件读入 NSString,然后使用:

NSString *path = [[NSBundle mainBundle] pathForResource:@"test.html" ofType:nil];
NSString *html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
_textView.attributedText = [[NSAttributedString alloc] initWithHTML:html baseURL:nil options:options documentAttributes:&attributes];

至少如果它与UIWebViews. URL 使用 baseURL 解析。看来,在您的代码中,源 url 也用作baseURL. 所以我传递了一个nilURL 以防止解析本地文件 URL。

于 2013-11-02T20:40:52.670 回答
0

这个问题的答案是 HTML 文件无效。

直接从 Objective-C 中定义的字符串复制/粘贴了 html,我忘记在每个引号之前删除转义符。这当然直接转换为文件 url 而不是 HTML url。删除转义标记可以解决此问题。

于 2013-11-02T20:58:18.767 回答