2011-12-10 18 views
0

栄養表示のように見えるようにビルドされたローカルHTML/CSSでUIWebViewをロードしようとしています。問題は、食べ物のデータが私のiPhoneアプリの中にあることです。私はすべてのHTMLを1つの巨大なNSStringオブジェクトに入れてデータを連結しなければならないのか、ローカルの.htmlファイルからHTMLをロードする方法があるのですが、Objective-それにC?Objective-CデータをローカルHTMLファイルをロードするUIWebViewに「注入」しますか?

答えて

2

コードは次のようなもの(使用して、このexample)になります%@マーカーを使用し、stringWithFormat:を使用して1回の移動で注入を実行します。これは、TidBITS Newsアプリのページを、RSSから来たものを使って構築する方法です。それは本当にかなり痛いです。

+0

ええ、私は 'stringWithFormatを使用することを計画していた:'、私はちょうど私がする必要はありませんでした望みます。私がHTMLを圧縮すると、それほど大きなものではないので、私はそれが私の行くべきことだと思う。 –

1

NSDataのdataWithContentsOfFileメソッドを使用して基本HTMLを読み込み、必要に応じてjavascriptを使用してhtmlを変更できます。データは「安全」されて注入される場合はを振りかけ、フォーマット文字列として、あなたの「巨大なNSStringのオブジェクト」を構築することができ、

NSString *path = [[NSBundle mainBundle] pathForResource:@"food" ofType:@"html"]; 
NSData *data = [NSData dataWithContentsOfFile:path]; 
if (data) { 
    [webView loadData:data MIMEType:@"text/html" textEncodingName:@"UTF-8"]; 
} 
[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');" 
        "script.type = 'text/javascript';" 
        "script.text = \"function myFunction() { " 
         "var field = document.getElementById('field_3');" 
         "field.value='Calling function - OK';" 
        "}\";" 
        "document.getElementsByTagName('head')[0].appendChild(script);"]; 

[webView stringByEvaluatingJavaScriptFromString:@"myFunction();"]; 
0

私は両方のハイブリッドを行う - あなたが読み込んだアプリケーションのHTMLファイルを持っているし、UIWebViewに与える前にその中の特定の文字列を置き換えてください。たとえば、あなたがこの

<html> 
<head> 
<title><!--foodName--></title> 
</head> 
<body> 
<h1><!--foodName--></h1> 
<p>Calories/100g: <!--foodCalories--></p> 
</body> 
</html> 

のようなファイルを持っている可能性がありますので、あなたがしたい実際の値とあなたの特別なプレースホルダのコメントを置き換え、ココアの中にそれをロードすると思います。

NSDictionary *substitutions = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"Carrots", @"foodName", 
           [NSNumber numberWithInt:20], @"foodCalories", 
           // add more as needed 
           nil]; 

NSMutableString *html = [NSMutableString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"foodCard" ofType:@"html"] 
                 encoding:NSUTF8StringEncoding 
                  error:nil]; 

for(NSString *substitutionKey in substitutions) 
{ 
    NSString *substitution = [[substitution objectForKey:substitutionKey] description]; 
    NSString *searchTerm = [NSString stringWithFormat:@"<!--%@-->", substitutionKey]; 

    [html replaceOccurrencesOfString:searchTerm withString:substitution options:0 range:NSMakeRange(0, [html length])]; 
} 

[webView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; 
0

iOSの2ので、あなたのWebViewでJSスクリプトを実行するためのUIWebViewサブクラス内- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)scriptを使用することができます。これは、アプリケーションの「Objective-C」部分からデータを注入するための最良の方法です。

Cfの:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/#//apple_ref/occ/instm/UIWebView/stringByEvaluatingJavaScriptFromString

関連する問題