4

我的 iPhone 应用程序中有一些 HTML 和一些图像,排列如下:

html/
    foo.html
images/
    bar.png

我可以bar.pngUIWebView几种不同的方式出现——要么从 . 加载foo.html,要么NSUrl从 html 目录返回目录树:

<img src="../images/bar.png"/>

或通过加载foo.html到字符串中,使用loadHtmlString,并使用[[NSBundle mainBundle] bundleURL]作为baseURL

<img src="images/bar.png"/>

不过,这两种情况都有些笨拙——在第一种情况下,如果我移动 HTML 文件,我必须重新调整所有相对路径,而在第二种情况下,我必须忽略 HTML 文件的实际路径结构。

我想做的是这个——

<img src="/images/bar.png"/>

-- 将bundleURL视为“站点”的根。有什么办法可以完成这项工作,还是我注定要翻译成file:///images/bar.png并且找不到文件?

4

2 回答 2

1

我能看到你这样做的唯一方法是在你的应用程序中嵌入一个网络服务器。Matt Gallagher有一篇关于此的博客文章,您可以从这里开始。或者,可以将CocoaHTTPServerMongoose放入您的项目中。

于 2012-01-25T13:54:02.470 回答
0

如果我没记错的话,您的项目包中有一些文件要加载到 Web 视图中。你可以用这几行代码简单地做到这一点:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"bar" ofType:@"png"];
NSURL    *imageURL  = [NSURL fileURLWithPath:imagePath];

我假设您有一个包含 Web 视图模式的 text/html 文件。您需要将图像作为对象添加到那里 ( src="%@"...),然后将 添加imageURL到模式中:

NSString *path = [[NSString alloc]initWithString:[[NSBundle mainBundle]pathForResource:@"htmlPattern" ofType:@"html"]];
NSError *error;
NSString *pattern = [[NSString alloc]initWithContentsOfFile:path 
                                                   encoding:NSUTF8StringEncoding
                                                      error:&error];


htmlPage = [[NSString  alloc]initWithFormat:pattern,
            imageURL; 
webView = [[UIWebView alloc] initWithFrame:WEBVIEW_FRAME];
[webView loadHTMLString:htmlPage baseURL:[NSURL URLWithString:path]];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:pattern]]];
于 2012-06-11T20:11:43.543 回答