2011-09-19 6 views
7

में एक फॉर्म सबमिट करें मेरे पास वेब सेवा के साथ बातचीत करने के लिए UIWebView में एक फॉर्म है, जब मैं फॉर्म सबमिट करता हूं, तो डेटा वेब सेवा पर भेजा जाता है और यह परिणाम किसी अन्य UIWebView पर वापस कर देगा। दो UIWebViews नेविगेशन नियंत्रक के अंतर्गत हैं, इसलिए जब उपयोग फ़ॉर्म सबमिट करता है, तो यह परिणाम प्रदर्शित करने के लिए किसी अन्य दृश्य पर स्लाइड करता है। क्या कोई मुझे बता सकता है कि मैं इसे कैसे प्राप्त कर सकता हूं? मैं फॉर्म तत्व में "कार्रवाई" विशेषता में क्या भरूं? मैं उपयोगकर्ता इनपुट को एप्लिकेशन में वापस कैसे प्राप्त कर सकता हूं ताकि मैं वेब सेवा का उपयोग कर सकूं? मैं इस क्षेत्र में नया हूं, किसी भी मदद की सराहना की जाएगी। धन्यवाद!UIWebView


अद्यतन:

वहाँ वेब दृश्य वापस मेरे कार्यक्रम के लिए से प्रपत्र डेटा को बचाने के लिए कोई तरीका है? मुझे लगता है कि जब मैं सबमिट बटन पर क्लिक करता हूं, और फिर वेब सेवा पूछना शुरू करता हूं तो फॉर्म डेटा को प्रोग्राम में वापस सहेजना बेहतर होता है (यानी स्टोर पैराम्स एनएसस्ट्रिंग में)।

+0

क्या आपका सबमिट बटन एक मूल UIButton या HTML बटन तत्व है। – sElanthiraiyan

+0

इसका एक HTML "सबमिट" बटन है, इसलिए मुझे आश्चर्य है कि मेरे प्रोग्राम में डेटा कैसे सहेजना है। – Michael

+0

तो आपको मेरे उत्तर में उल्लिखित दूसरे कार्य का उपयोग करना चाहिए।सबमिट बटन में नकली यूआरएल पर नेविगेट करें और चाहिएस्टार्ट लोड VithRequest निकाल दिया जाएगा। उस विधि के अंदर stringByEvaluatingJavaScriptFromString का उपयोग कर जावास्क्रिप्ट विधि को कॉल करें। उस जावास्क्रिप्ट विधि में आवश्यक डेटा वापस करें। समझ गया! – sElanthiraiyan

उत्तर

11

आप उद्देश्य सी से एक जावास्क्रिप्ट विधि फायरिंग के लिए

stringByEvaluatingJavaScriptFromString 

समारोह का उपयोग करें और उस विधि से एक वापसी मान प्राप्त कर सकते हैं।

उदाहरण

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

और जावास्क्रिप्ट

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

में लिए

और मुझे शक है कि आप निम्न कार्य कर उपाध्यक्ष प्रतिकूल चाहता हूँ सकता है (कॉल जावास्क्रिप्ट से Obj सी विधि)। यह सीधे किया जा सकता है यहां काम है।

UIWebViewDelegate सेट करें, और विधि को लागू करें वेब व्यू: shouldStartLoadWithRequest: नेविगेशन टाइप:। अपने जावास्क्रिप्ट कोड में, कुछ नकली यूआरएल पर नेविगेट करें जो उस जानकारी को एन्कोड करता है जिसे आप अपने ऐप पर पास करना चाहते हैं, जैसे कहें: window.location = "someLink: // yourApp/form_Submitted: param1: param2: param3"; अपनी प्रतिनिधि विधि में, इन नकली यूआरएल देखें, आपको जो जानकारी चाहिए उसे निकालें, जो भी कार्रवाई उचित है, और नेविगेशन को रद्द करने के लिए कोई भी वापस न करें।

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

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

    return YES; 
} 
+1

धन्यवाद! पहला मेरे लिए और अधिक समझ में आता है। – Michael

1

यदि मैं आपकी समस्या को सही ढंग से समझता हूं, तो मुझे लगता है कि निम्नलिखित कदम आपको समाधान प्रदान करने में मदद करेंगे।

  1. फ़ॉर्म की कार्रवाई में, आपको वेब सेवा पर यूआरएल लिखना होगा।
  2. आपके रूप में, इनपुट फ़ील्ड का नाम वेब सेवा के लिए अपेक्षित मानकों के नाम से मेल खाना चाहिए।
  3. अपने पहले UIWebView नेविगेशन नियंत्रण में, दूसरी UIWebView वाले स्क्रीन की ऑब्जेक्ट बनाएं और ऑब्जेक्ट के इंस्टेंस सदस्य को वेब सेवा की प्रतिक्रिया सेट करें।
  4. अपना पहला UIWebView नेविगेशन नियंत्रण में, आप
    [self presentModalViewController:webView2Object animated:YES];
  5. लिखने के webView2, दूसरी UIWebView लोड करने से पहले प्रतिसाद पार्स होने के स्क्रीन में की जरूरत है। और जावास्क्रिप्ट का उपयोग कर प्रदर्शित पृष्ठ के साथ इंजेक्ट करें।
+1

क्या इसका मतलब है कि मुझे फॉर्म में अनुरोध करना है? चूंकि पूरा फॉर्म uiwebview में है, मैं परिणाम को यूवीव्यू (तालिका तालिका में एक सूची की तरह) कैसे प्राप्त कर सकता हूं? – Michael

+0

यदि आप अपने वेब सेवा यूआरएल के पैरामीटर के नाम के रूप में फॉर्म में इनपुट तत्वों का नाम रखते हैं, तो पैरामीटर स्वचालित रूप से आपके यूआरएल के साथ सेट हो जाएगा और उस यूआरएल को सबमिट किया जाएगा। फिर यह नया पेज लोड करना शुरू कर देगा, आप इसे WebViewDidStartLoad प्रतिनिधि विधि के अंदर देख सकते हैं। – Naved

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^