«Вставить» данные Objective C в UIWebView, который загружает локальный файл HTML? - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь загрузить UIWebView с локальным HTML / CSS, который выглядит как ярлык питания.Проблема в том, что данные для еды находятся внутри моего приложения для iPhone.Нужно ли мне помещать весь мой HTML в один огромный объект NSString и объединять в нем мои данные, или есть способ загрузить HTML из локального файла .html, но каким-то образом «внедрить» данные, хранящиеся в Objective-С этим?

Ответы [ 4 ]

2 голосов
/ 10 декабря 2011

Если вводимые данные являются «безопасными», вы можете создать свой «огромный объект NSString» в виде строки формата, обсыпанной маркерами %@, и использовать stringWithFormat: для выполнения внедрения одним движением.Вот как я создаю страницы в приложении TidBITS News, используя фрагменты, которые все приходят из RSS.Это действительно довольно безболезненно.

1 голос
/ 10 декабря 2011

Вы можете загрузить базовый html, используя метод NSData dataWithContentsOfFile, а затем использовать javascript для изменения html так, как вам нужно.

Код будет выглядеть примерно так (используя этот пример ):

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 голосов
/ 11 августа 2015

Начиная с iOS 2, вы можете использовать - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script в подклассе UIWebView для выполнения сценариев JS в веб-представлении. Это лучший способ ввести данные из «части Objective-C» вашего приложения.

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

0 голосов
/ 10 декабря 2011

Я бы сделал гибрид обоих: в приложении, которое вы загружаете, есть 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]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...