2011-09-19 20 views
7

Tengo un formulario en el UIWebView para interactuar con un servicio web, cuando envío el formulario, los datos se envían a un servicio web y devolverá el resultado a otro UIWebView. Las dos UIWebView están bajo un controlador de navegación, por lo que cuando el usuario envía el formulario, se desliza a otra vista para mostrar el resultado. ¿Alguien puede indicarme cómo puedo lograr esto? ¿Qué llené en el atributo "acción" en el elemento de formulario? ¿Cómo puedo obtener la entrada del usuario a la aplicación para que pueda usar el servicio web? Soy nuevo en este campo, cualquier ayuda será apreciada. ¡Gracias!Envíe un formulario en UIWebView


Actualización:

¿Hay una manera de salvar los datos del formulario de la página we de nuevo a mi programa? Creo que es mejor guardar los datos del formulario en el programa (es decir, almacenar los parámetros en nsstring) cuando hago clic en el botón Enviar y luego empiezo a consultar el servicio web.

+0

Es su botón Enviar un UIButton nativo o un elemento de botón HTML. – sElanthiraiyan

+0

Es un botón html "enviar", es por eso que me pregunto cómo guardar datos en mi programa. – Michael

+0

, entonces debería usar el segundo trabajo que he mencionado en mi respuesta.Navegue a una URL falsa en el botón de enviar y shouldStartLoadWithRequest se activará. Dentro de ese método, llame a un método de javascript utilizando stringByEvaluatingJavaScriptFromString. En ese método javascript devuelve los datos requeridos. ¡Lo tengo! – sElanthiraiyan

Respuesta

11

Puede utilizar la función

stringByEvaluatingJavaScriptFromString 

para la cocción de un método de Javascript c objetivo y obtener un valor de retorno de ese método.

Por ejemplo

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

y en javascript

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

Y dudo que aquí es posible que quiero hacer viceversa (método obj-c de JavaScript llamada). Esto no se puede hacer directamente aquí es el trabajo alrededor.

Establezca un UIWebViewDelegate e implemente el método webView: shouldStartLoadWithRequest: navigationType :. En su código JavaScript, navegue a alguna URL falsa que codifique la información que desea pasar a su aplicación, como, por ejemplo: window.location = "someLink: // yourApp/form_Submitted: param1: param2: param3"; En su método delegado, busque estas URL falsas, extraiga la información que necesita, realice las acciones apropiadas y devuelva NO para cancelar la navegación.

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

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

    return YES; 
} 
+1

Gracias! El primero me parece más comprensible. – Michael

1

Si entendí correctamente su problema, creo que seguir los pasos le ayudará a proporcionar la solución.

  1. En la acción de la forma, tiene que escribir la dirección URL del servicio web.
  2. En su formulario, el nombre del campo de entrada debe coincidir con el nombre de los parámetros esperados para el servicio web.
  3. En su primer control de navegación UIWebView, cree el objeto de la pantalla que tenga el segundo UIWebView y configure la respuesta del servicio web al miembro de la instancia del objeto.
  4. En su primer control UIWebView de navegación, es necesario escribir
    [self presentModalViewController:webView2Object animated:YES];
  5. En la pantalla de tener webView2, analizar la respuesta antes de cargar la segunda UIWebView. e inyectarlo con la página mostrada usando javascript.
+1

¿Eso significa que tengo que poner la solicitud en el formulario? Como todo el formulario se encuentra en la página web, ¿cómo puedo devolver el resultado a una vista (como una lista en una vista de tabla)? – Michael

+0

Si conserva el nombre de los elementos de entrada en el mismo formato que el nombre de los parámetros para su URL de servicio web, el parámetro se establecerá automáticamente con su URL y se enviará a esa URL. Luego comenzará a cargar la página nueva, puede verificarlo dentro del método delegado webViewDidStartLoad. – Naved

Cuestiones relacionadas