UIWebView提供了3種加載頁面的方式:
- (void)loadRequest:(NSURLRequest *)request;
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
這裡我只講前兩種,最後一種應該不常用。
- (void)loadRequest:(NSURLRequest *)request
這個方法常用於加載指定url的網頁,但其實它也能用來加載本地資源,而且很方便。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"Htmls"];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
這 樣就把Htmls/index.html加載到webview裡了。需要注意的是,Htmls這個文件夾是 以”create folder references for any added folders“方式引入的,而非默認。這樣做有兩個好處,一是編 譯之後,資源的目錄結構會和當前項目保持一致,而不會亂七八糟的散落在.app包中,也因此資源文件可以被html輕易找到;二是finder中文件目錄 的改變會直接映射到項目中,無需在xcode中手動增刪文件。
index.html中,前端工程師引用了樣式表
base.css這個文件的路徑是其實是xxx.app/Htmls/css/base.css,而不是xxx.app/css/base.css,它可以被找到,原因是loadReqest這種方式會把當前load的這個html文件的路徑作為baseURL。
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
這個方法用於直接加載html代碼。如果html沒有存在文件中,推薦使用這種方法。當然你也可以用這個方法從本地html讀取代碼,然後加載。但此時請注意baseURL要傳對,否則html中引用的資源是找不到的。
繼續用上面的例子,要正確加載資源,你得這麼寫:
NSString *baseURL = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Htmls"];
[self.webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:baseURL]];
這樣,前端工程師就可以很習慣的跟你配合開發了~