Buduję aplikację, która będzie wyświetlać użytkownikom newslettery. biuletyny są wyświetlane w uiWebView. Czytam adresy URL newsletterów z kanału RSS. Analizuję xml, aw widoku tabeli mam wszystkie biuletyny. Po kliknięciu na komórkę moduł uiWebView zostanie naciśnięty, a biuletyn zostanie załadowany. Ponieważ uiWebView nie otwiera odnośników, które mają cel = _blank, muszę zastąpić _blank z miejsca docelowego "". W NSOperation pobrać zawartości html i po zakończeniu pobierania wymienić struny tak:UIWebView ładowanie przeanalizowanego łańcucha html
NSMutableString *page = [[[NSMutableString alloc] initWithData:pageData encoding:NSISOLatin1StringEncoding] autorelease]; [page replaceOccurrencesOfString:@"target=_blank" withString:@"target=""" options:0 range:NSMakeRange(0, [page length])];
po tym, jak to zrobić i załadować analizowany ciąg w Webview aby wyświetlić go do użytkownika.
[myWebView loadHTMLString:page baseURL:[NSURL URLWithString:@""]];
natomiast NSOperation pobiera zawartość strony HUD ze wskaźnikiem aktywności i etykiety, która mówi ładuje się pokazał. Po zakończeniu pobierania HUD zostanie usunięty z superview.
jak dotąd tak dobrze .., ale tutaj przychodzą pytania. użyłem NSOperation z funkcją wywołania zwrotnego, ponieważ nie byłem w stanie określić ostatniego wywołania webDidFinishLoading (przeczytałem to UIWebView - How to identify the "last" webViewDidFinishLoad message? - jest to część mojego problemu, ale odpowiedzią było użycie niektórych prywatnych klas Apple i jest to problem dla mnie). tak ja to robię:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
NSString *urlString = url.absoluteString;
NSLog(@"WebViewSouldStartWithRequest: %@", urlString);
if (navigationType == UIWebViewNavigationTypeLinkClicked)
{
if(![urlString isEqualToString:@"about:blank"])
{
NSLog(@"FeedViewController: startPageLoad");
activityHud = [[HUDView alloc] initWithFrame:CGRectMake(110, 100, 80, 80)];
[activityHud setText:@"Loading"];
[myWebView addSubview:activityHud];
NSLog(@"FeedViewController: pageUrl = %@", urlString);
[self resetWebView];
[urlLoader loadPageFromUrl:request.URL withCallbackTarget:self withCallbackSelector:@selector(endLoading:)];
}
}
return NO;
}
- (void) endLoading:(NSMutableString *)page { [self resetWebView]; NSLog(@"FeedViewController: endLoading"); [activityHud removeFromSuperview]; [myWebView loadHTMLString:page baseURL:[NSURL URLWithString:@""]]; }
po dotykam komórkę w widoku tabeli i biuletynu jest pokazał wygląda tak jak powinien, po kliknięciu linku w newsletterze , strona jest ładowana z nowym żądaniem, parsowana, ale wizualnie nie wygląda tak jak powinna (patrzę na stronę po parsowaniu w NSLog i ma style CSS i znaczniki html, głowa, ciało otwarte i zamknięte poprawnie) każdy miał to problem z uiWebView, nie wyświetlając poprawnie stron internetowych?
Próbowałem ładowania strony z - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{ return YES; }
i - (void) webViewDidFinishLoad: (UIWebView *) Webview {} i in - webViewDiStartLoad
ale metody są wywoływane dla każdego elementu, który jest załadowany do WebView więc pokazywanie i ukrywanie HUD w tej metodzie nie jest dobrym rozwiązaniem.
I napotkał pewne problemy podczas korzystania - (BOOL) Webview: (UIWebView *) Webview shouldStartLoadWithRequest: (*) Wniosek NSURLRequest navigationType: (UIWebViewNavigationType) navigationType {...} nie zwraca
na przykład linki, które mają ścieżki takie jak ta/Bilder-Galerien nie działa iw NSLog i odbierać to dla nich
wiadomo schemat, nic nie robi: /bilder-Galerien
ale WH pl używam
- (BOOL) Webview: (UIWebView *) Webview shouldStartLoadWithRequest: (NSURLRequest *) prośba navigationType: (UIWebViewNavigationType) navigationType {return YES} i didstartLoading i finishLoading adresy URL są ładowane i nie wiem dlaczego ...
Kolejnym problemem są specjalne niemieckie znaki ..w moim pierwszym załadowaniu (po naciśnięciu komórki w interfejsie uiTableView) strona jest analizowana tak, jak powinna być przez uiWebView, ale po kliknięciu łącza i odpowiednie żądanie jest ładowane również znaki nie są poprawnie przetwarzane.
puszka ktoś wskazuje na mnie w dobrym kierunku? z góry dziękuję
Przestań odpowiadać na swoje pytanie w kółko! – SK9
@ SK9: usunąłem odpowiedzi .. ale następnym razem proszę o odpowiedź na pytanie, jeśli możesz! –