#ios
#iOS
Вопрос:
В моем приложении у меня есть контроллер просмотра на основе UIWebView, показывающий информацию и кредиты о самом приложении. В качестве части информации отображается версия приложения, полученная из информационного справочника mainBundle. Итак, этой строки нет в исходном HTML; она устанавливается программно, путем замены заполнителя.
Поэтому последовательность такова: 1) Я загружаю HTML в NSString 2) Я заменяю заполнитель фактической версией 3) Я показываю результирующую строку в UIWebView, вызывая метод loadHTMLString:baseURL:
HTML также содержит гиперссылки на некоторые веб-страницы в Интернете. Все в порядке, но для этой проблемы: если я коснусь гиперссылки и, следовательно, перейду на соответствующую веб-страницу, я не смогу вернуться на свою исходную информационную страницу (canGoBack возвращает NO, GoBack ничего не делает).
Есть предложения? Заранее спасибо.
Ответ №1:
В конце концов, я нашел удовлетворительное решение, которым я хотел бы поделиться.
1) Я изменил HTML-код своей информационной страницы, вставив следующий код, где я хочу показать версию приложения:
<p>App version:
<script type="text/javascript">
var args = document.location.search.substring(1).split("amp;");
for (var i in args) {
var nameValue = args[i].split("=");
if (nameValue[0] == "version")
var version = nameValue[1];
}
if (version)
document.write(version);
</script>
</p>
Этот фрагмент кода проанализирует часть запроса URL-адреса, ищет аргумент «version=<версия>» и использует его значение для отображения версии приложения.
2) При подготовке URL-адреса, который будет использоваться UIWebView, я извлекаю версию приложения из основного пакета:
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
Затем я добавляю его в конец моей строки URL:
NSString* urlString = [NSString stringWithFormat:@"<my_info_page>.html?version=%@", version];
3) Наконец, я использую UIWebView для отображения страницы:
NSURL* url = [[NSURL alloc] initWithString:urlString];
NSURLRequest* request [[NSURLRequest alloc] initWithUrl:url];
[mWebView loadRequest:urlRequest];
[urlRequest release];
[url release];
где mWebView — это IBOutlet типа UIWebView, правильно подключенный к веб-просмотру в файле XIB.
Он корректно работает на моем iPhone 4, включая функции веб-просмотра назад / вперед при переходе по гиперссылкам, сохраняя пользователя внутри приложения.
Ответ №2:
В этом случае я бы вышел из приложения и загрузил Safari:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
}
Единственным недостатком является то, что пользователь выходит из вашего приложения. Вы могли бы поместить alertview в этот метод, чтобы сначала предупредить их…
В качестве альтернативы вам придется закодировать собственную кнопку возврата.
Комментарии:
1. Не совсем то, что я ищу, но интересные предложения. Голосование завершено.