2011-09-19 26 views
7

Bir web hizmeti ile iletişim kurmak için UIWebView'da bir formum var, formu gönderdiğimde, veriler bir web hizmetine gönderilir ve sonucu başka bir UIWebView'a döndürür. İki UIWebView, bir gezinme denetleyicisi altındadır, bu nedenle kullanım formu gönderdiğinde, sonucu görüntülemek için başka bir görünüme kaydırır. Bunu nasıl başarabileceğimi bilen var mı? Form öğesindeki "action" özelliğini ne doldurabilirim? Web servisini kullanabilmem için kullanıcı girdisini uygulamaya geri nasıl alabilirim? Bu alana yeni geldim, herhangi bir yardım takdir edilecektir. Teşekkürler!UIWebView'da bir form gönderin


Güncelleme:

geri programa web görünümünden form verilerini kaydetmek için bir yolu var mı? Gönderme düğmesini tıkladığımda form verilerini tekrar programa kaydetmek (yani nsstring'e para birimi depolamak) ve web servisini sorgulamaya başlamak daha iyi olur.

+0

Gönder düğmeniz yerel bir UIButton veya bir HTML Düğme öğesi midir? – sElanthiraiyan

+0

Bir html "submit" düğmesi, bu yüzden veriyi programıma nasıl kaydedeceğimi merak ediyorum. – Michael

+0

sonra cevabımda bahsettiğim ikinci çalışmayı kullanmalısın.Gönderme düğmesindeki sahte bir URL'ye gidin veStartLoadWithRequest kullanılmaya başlanmalıdır. Bu yöntemde stringByEvaluatingJavaScriptFromString kullanarak bir javascript yöntemi çağırın. Bu javascript yönteminde gerekli verileri döndür. Anladım! – sElanthiraiyan

cevap

11

Sen nesnel c bir javascript yöntemi ateş için

stringByEvaluatingJavaScriptFromString 

işlevini kullanın ve bu yöntemin dönüş değeri elde edebilirsiniz.

//Calling the getTheUsername in the javascript. 
NSString *userName = [yourWebView stringByEvaluatingJavaScriptFromString:@"getTheUsername()"]; 

ve javascript

//Method in javascript 
function getTheUsername() 
{ 
return userNameVariable; 
} 

Örneğin

için

Ve burada bunun tersi yapmak istediğini olabileceğini şüphe (javascript obj-c yöntemini çağırın). Bu doğrudan yapılamaz, iş etrafındaki iştir.

Bir UIWebViewDelegate ayarlayın ve webView yöntemini uygulayın: shouldStartLoadWithRequest: navigationType :. JavaScript kodunuzda, uygulamanıza geçmek istediğiniz bilgileri kodlayan bazı sahte URL'lere gidin, örneğin: window.location = "someLink: // yourApp/form_Submitted: param1: param2: param3"; Temsilci yönteminizde, bu sahte URL'leri arayın, ihtiyacınız olan bilgileri alın, uygun eylemleri yapın ve gezinmeyi iptal etmek için NO değerini döndürün.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 

    NSLog(@"%@",[[request URL] query]); 

    return YES; 
} 
+1

Teşekkürler! İlki benim için daha anlaşılabilir gibi görünüyor. – Michael

1

Sorununuzu doğru bir şekilde anladıysam, aşağıdaki adımları uygulamanızın çözümü sağlamanıza yardımcı olacağını düşünüyorum.

  1. Form eyleminde, URL'yi web hizmetine yazmanız gerekir.
  2. Formunuzda, giriş alanının adı, web hizmeti için beklenen parametrelerin adıyla eşleşmelidir.
  3. İlk UIWebView Gezinme denetiminizde, ikinci UIWebView'a sahip olan ekran nesnesini oluşturun ve web hizmetinin yanıtını nesnenin örnek üyesine ayarlayın. İlk UIWebView Navigasyon kontrolünde
  4. , sen webView2, ikinci UIWebView yüklemeden önce yanıtı ayrıştırmak zorunda ekranında
    [self presentModalViewController:webView2Object animated:YES];
  5. yazmak gerekir. ve javascript kullanarak görüntülenen sayfa ile enjekte.
+1

Bu, isteği formda vermek zorunda olduğum anlamına mı geliyor? Tüm form uiwebview'de olduğu için, sonucu bir uiview'e nasıl geri alabilirim (tablo görünümündeki bir liste gibi)? – Michael

+0

Girdi öğelerinin adını, Web Hizmeti URL'nizin parametrelerinin adıyla aynı formda tutarsanız, parametre otomatik olarak URL'nizle ayarlanır ve bu URL'ye gönderilir. Daha sonra yeni sayfa yüklemeye başlar, webViewDidStartLoad temsilci yöntemi içinde kontrol edebilirsiniz. – Naved