UI-öğeleri kullanarak doğal olarak yapmak yerine, dinamik içeriği görüntülemek için UIWebView kullanmaya gittim. Yerel uygulama işlevlerini, UIWebView içindeki bağlantılara vurmaktan tetiklemek mümkün mü? Örnek: daha sonra mevcut Görünümü değiştiren bir linke mi basıyorsunuz?Bir UIWebView uygulamasıyla etkileşim kurabilir (iletişim kurabilir)?
cevap
Evet, mümkün. HTML'nize, bir JS, iOS kodunda gibi
window.location = "request_for_action://anything/that/is/a/valid/url/can/go/here";
Sonra sahte düzeni ile bir URL yüklemek için Web görünümü için bir temsilci atamak yazabilir ve temsilci, sap
webView:shouldLoadWithRequest:navigationType
if([request.URL.scheme isEqualToString: @"request_for_action"])
{
// parse your custom URL to extract parameter, use URL parts or query string as you like
return NO; // return NO, so webView won't actually try to load this fake request
}
gibi bir şeyle
- kenara Hemen
bir iOS co izin başka bir yol yapabilirsiniz de tam olarak ben başarmak için gerekenler görünüyor
NSString* returnValue = [self.webView stringByEvaluatingJavaScriptFromString: "someJSFunction()"];
Evet! Kullanıcı bir bağlantıyı bastığında, bunu web görünümünün temsilcisinden duyarsınız ve istediğiniz şeyi yapabilirsiniz. Güçlü şeyler bu şekilde yapılabilir.
Web görünümünün temsilcisi webView:shouldStartLoadWithRequest:navigationType:
gönderilir. Ne olduğunu analiz edip, istediğin gibi cevap ver. Web görünümünün bağlantıyı takip etmesini engellemek için (tamamen yanlış olsa da), sadece NO döndürün.
Bu örnekte, TidBITS Haberler uygulamasından, Web sayfasında tamamen oluşturulmuş bir play:
şemasını kullanan bir bağlantım var. Ben delege ve oyundaki olduğunu tespit:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)r
navigationType:(UIWebViewNavigationType)nt {
if ([r.URL.scheme isEqualToString: @"play"]) {
[self doPlay:nil];
return NO;
}
if (nt == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:r.URL];
return NO;
}
return YES;
}
UIWebViewDelegate
yöntemi webView:shouldStartLoadWithRequest:navigationType:
uygulayın.
Gezinme Gezinme Türü ve istek gerektiği gibi.
Temsilci ayarladı ve uiwebview temsilci yöntemlerini uyguladı. Ancak bazı uiwebview içeriğine tıkladığımda temsilci yöntemlerimden hiçbiri aranmıyor. Geri arama yok. Ne yapılmalı? – iPhoneDeveloper
@iPhoneDeveloper Kendi sorunuzu tüm ilgili detaylarla birlikte göndermelisiniz. – rmaddy
kullanarak ederek html bazı JS kodlarını çağırmak. Ama bu yöntemi nereye koyacağımı anlayamıyorum? Açıklayıcı cevap için teşekkürler, bu arada! –
UIWebView'un temsilcisinin bulunduğu yere koyun! – matt
Alwesome, bu işe yarıyor! :) Bir soru daha: Önceden tanımlanmış URL-şema ile bağlantıyı tıklattığımda, uygulama Safari'ye yönlendiriyor ve onu açmaya çalışıyor? –