2012-03-12 76 views
3

嗨我想創建一個(內部或外部)的HTML模板,我從XML請求接收的數據。這是我的代碼和它的正常工作至今:UIWebView動態html到模板

NSString* desc = [screenData.jsonVars objectForKey:@"descriptionTXT"]; 
    NSString* title = [screenData.jsonVars objectForKey:@"titleTXT"]; 
    NSString* day = [screenData.jsonVars objectForKey:@"dayTXT"]; 
    NSString* month = [screenData.jsonVars objectForKey:@"monthTXT"]; 
    NSString* url = [screenData.jsonVars objectForKey:@"dataURL"]; 
    NSString* htmlContentString = [NSString stringWithFormat: 
            @"<html>" 
            "<style type=\"text/css\">" 
            "body { background-color:transparent; font-family:Marker Felt; font-size:44;color:#fff;}" 
            "</style>" 
            "<body>" 
            "<p style=\"text-align:center;font-size:65px;\">%@</p>" 
            "<div style=\"color:#ff9900;margin:5px;padding:10px;\">%@ &nbsp;%@</div>" 
            "<div style=\"color:#000;background:#DBDBDB;margin:5px;padding:10px;\">%@</div>" 
            "<div style=\"color:#000;background:#ff9900;margin:5px;padding:10px;\"><a href=\"%@\">Go to website</a></div>" 
            "</body></html>", title, day, month, desc, url]; 
    [BT_debugger showIt:self:[NSString stringWithFormat:@"This is the HTML: %@", htmlContentString]]; 
    [self.webView loadHTMLString:htmlContentString baseURL:nil]; 

    [self.view addSubview:webView]; 

現在我要拿出HTML和讀取來自外部或內部的文件。例如在template1.html中

正如你所看到的,它是動態的(它是數據),我想保持這種方式。

在推動這一 感謝任何人建議,

D.

回答

1
//set local path for file 
NSString *filePath = [NSString stringWithFormat:@"%@/%@", 
    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0], 
    @"myTemplate.html"]; 

//convert htmlContentString to raw data 
NSData *data = [htmlContentString dataUsingEncoding:NSUTF8StringEncoding]; 

//write data to file 
[data writeToFile:filePath atomically:YES]; 

//display file in webview 
[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString: filePath]]]; 
+0

erkanyildiz您好,感謝通話時間回答我的問題。但是它怎麼知道它在html中的使用方式和變量呢? – Danny 2012-03-12 20:59:34

+0

我的意思是:如何以及在哪裏使用標題,日,月,desc,url的NSString值? – Danny 2012-03-12 21:12:04

+0

其實我沒有得到你想要的東西。您會收到一些XML數據,將其轉換爲HTML,並將其顯示在uiwebview中。那麼除了那些之外你還想要什麼? – erkanyildiz 2012-03-13 00:05:16

1

template.html

<html> 
<head> 
</head> 
<body> 
<div>[[[desc]]]</div> 
<div>[[[title]]]</div> 
<div>[[[day]]]</div> 
</body> 
</html> 

代碼

NSString *desc = @"descriptionText"; 
NSString *title = @"titleText"; 
NSString *day = @"dayText"; 
NSString *templateString = [[NSBundle mainBundle] pathForResource:@"template" ofType:@"html"]; 
NSMutableString *htmlContentString = [[NSMutableString alloc] initWithString:templateString]; 
[htmlContentString stringByReplacingOccurrencesOfString:@"[[[desc]]]" withString:desc]; 
[htmlContentString stringByReplacingOccurrencesOfString:@"[[[title]]]" withString:title]; 
[htmlContentString stringByReplacingOccurrencesOfString:@"[[[day]]]" withString:day]; 
[self.webView loadHTMLString:htmlContentString baseURL:nil]; 
[htmlContentString release]; 
[self.view addSubview:webView]; 
6

目前正使用答案與NSMutableString應該使用-replaceOccurrencesOfString:代替。此外,NSBundle -pathForResource:返回一個路徑,而不是文件的實際內容。下面是工作的例子:

模板

<!-- template.html --> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <style type="text/css"> 
      body{ 
       font-family:"Helvetica Neue UltraLight",helvetica,verdana; 
       margin-left:0; 
       margin-right:0; 
      } 
      section{ 
       padding-left:5px; 
       padding-right:5px; 
       font-size:12px; 
      } 
      h1{ 
       font-size: 16px; 
       padding-left:5px; 
      } 
      img{ 
       display: block; 
       /* 4:3 dimensions */ 
       width: 220px; 
       height:165px; 
      } 
     </style> 
    </head> 
    <body> 
     <h1>[[[name]]]</h1> 
     <img src="[[[image]]]" alt="" /> 
     <section> 
      <p>[[[full_description]]]</p> 
     </section> 
    </body> 
</html> 

代碼

// load the template 
NSString *path = [[NSBundle mainBundle] pathForResource:@"template" ofType:@"html"]; 
NSString *template = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 
NSMutableString *html = [NSMutableString stringWithString:template]; 

// make substitutions 
[html replaceOccurrencesOfString:@"[[[name]]]" withString:self.building.name options:NSLiteralSearch range:NSMakeRange(0, html.length)]; 
[html replaceOccurrencesOfString:@"[[[image]]]" withString:self.building.image options:NSLiteralSearch range:NSMakeRange(0, html.length)]; 
[html replaceOccurrencesOfString:@"[[[full_description]]]" withString:self.building.fulldescription options:NSLiteralSearch range:NSMakeRange(0, html.length)]; 

// load html string into webView 
[self.webview loadHTMLString:html baseURL:nil]; 
+0

這真的很有幫助。謝謝你的一個很好的例子。 – 2014-06-21 23:58:37