2011-09-19 21 views
7

Ho un modulo in UIWebView per interagire con un servizio Web, quando invio il modulo, i dati vengono inviati a un servizio Web e restituiranno il risultato a un altro UIWebView. Le due UIWebViews sono sotto un controller di navigazione, quindi quando l'uso invia il modulo, scorre su un'altra vista per visualizzare il risultato. Qualcuno può indicarmi come posso ottenere questo? Cosa devo inserire nell'attributo "azione" nell'elemento del modulo? Come posso richiamare l'utente sull'applicazione in modo da poter utilizzare il servizio web? Sono nuovo in questo campo, ogni aiuto sarà apprezzato. Grazie!Invia un modulo in UIWebView


Aggiornamento:

C'è un modo per salvare i dati del modulo da vista web di nuovo al mio programma? Penso che sia meglio salvare i dati del modulo sul programma (ad esempio, memorizza i parametri in nsstring) quando faccio clic sul pulsante di invio, quindi inizio a interrogare il servizio web.

+0

Il pulsante di invio è un UIButton nativo o un elemento Pulsante HTML. – sElanthiraiyan

+0

È un pulsante "invia" in formato html, ecco perché mi chiedo come salvare i dati nel mio programma. – Michael

+0

quindi dovresti usare il secondo lavoro che ho menzionato nella mia risposta.Passa a un URL falso nel pulsante di invio e dovresti avviareStartLoadWithRequest. All'interno di questo metodo chiama un metodo javascript usando stringByEvaluatingJavaScriptFromString. In quel metodo javascript restituisci i dati richiesti. Fatto! – sElanthiraiyan

risposta

11

È possibile utilizzare la funzione

stringByEvaluatingJavaScriptFromString 

per la cottura di un metodo javascript da Objective C e ottenere un valore di ritorno da quel metodo.

Per esempio

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

e in javascript

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

E dubito che qui si può desiderare di fare viceversa (chiamare il metodo obj-c da JavaScript). Questo non può essere fatto direttamente qui è il lavoro intorno.

Impostare un UIWebViewDelegate e implementare il metodo webView: shouldStartLoadWithRequest: navigationType :. Nel tuo codice JavaScript, accedi ad un URL falso che codifica le informazioni che vuoi passare alla tua app, ad esempio: window.location = "someLink: // yourApp/form_Submitted: param1: param2: param3"; Nel tuo metodo delegato, cerca questi URL falsi, estrai le informazioni che ti servono, esegui qualsiasi azione appropriata e restituisci NO per annullare la navigazione.

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

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

    return YES; 
} 
+1

Grazie! Il primo sembra più comprensibile per me. – Michael

1

Se ho compreso correttamente il problema, penso che i seguenti passaggi ti aiuteranno a fornire la soluzione.

  1. Nell'azione del modulo, è necessario scrivere l'URL per il servizio web.
  2. Nel modulo, il nome del campo di input deve corrispondere al nome dei parametri previsti per il servizio Web.
  3. Nel primo controllo di navigazione di UIWebView, creare l'oggetto dello schermo con secondo UIWebView e impostare la risposta del servizio Web sul membro dell'istanza dell'oggetto.
  4. Nel vostro primo controllo UIWebView di navigazione, è necessario scrivere
    [self presentModalViewController:webView2Object animated:YES];
  5. Nella schermata di avere webView2, analizzare la risposta prima di caricare la seconda UIWebView. e iniettalo con la pagina visualizzata usando javascript.
+1

Ciò significa che devo inserire la richiesta nel modulo? Dato che l'intero modulo si trova in uiwebview, come posso riportare il risultato a uniview (come un elenco in una visualizzazione tabella)? – Michael

+0

Se si mantiene il nome degli elementi di input nel formato uguale al nome dei parametri per l'URL del servizio Web, il parametro verrà automaticamente impostato con l'URL e verrà inviato a tale URL. Inizierà quindi a caricare una nuova pagina, puoi verificarla all'interno del metodo delegato webViewDidStartLoad. – Naved