2012-03-12 39 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