2011-09-19 5 views
7

Tôi có biểu mẫu trong UIWebView để tương tác với dịch vụ web, khi tôi gửi biểu mẫu, dữ liệu được gửi đến dịch vụ web và nó sẽ trả về kết quả cho một UIWebView khác. Hai UIWebViews nằm dưới một bộ điều khiển điều hướng, do đó khi sử dụng gửi biểu mẫu, nó sẽ chuyển sang một chế độ xem khác để hiển thị kết quả. Bất cứ ai có thể chỉ cho tôi cách tôi có thể đạt được điều này? Tôi phải điền gì vào thuộc tính "action" trong phần tử biểu mẫu? Làm cách nào để tôi có thể đưa người dùng nhập lại vào ứng dụng để tôi có thể sử dụng dịch vụ web? Tôi mới vào lĩnh vực này, bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn!Gửi biểu mẫu trong UIWebView


Cập nhật:

Có cách nào để lưu dữ liệu hình thức từ xem web trở lại chương trình của tôi? Tôi nghĩ tốt hơn là lưu dữ liệu biểu mẫu trở lại chương trình (ví dụ: lưu trữ thông số vào nsstring) khi tôi nhấp vào nút gửi, sau đó bắt đầu truy vấn dịch vụ web.

+0

Nút Gửi của bạn có phải là nút UIButton gốc hoặc phần tử Nút HTML hay không. – sElanthiraiyan

+0

Nút "gửi" html của nó, đó là lý do tại sao tôi tự hỏi cách lưu dữ liệu vào chương trình của mình. – Michael

+0

sau đó bạn nên sử dụng công việc thứ hai xung quanh mà tôi đã đề cập trong câu trả lời của tôi.Điều hướng đến url giả trong nút gửi và shouldStartLoadWithRequest sẽ được kích hoạt. Bên trong phương thức đó gọi một phương thức javascript bằng cách sử dụng stringByEvaluatingJavaScriptFromString. Trong phương thức javascript đó trả về dữ liệu cần thiết. Hiểu rồi! – sElanthiraiyan

Trả lời

11

Bạn có thể sử dụng chức năng

stringByEvaluatingJavaScriptFromString 

cho bắn một phương pháp javascript từ khách quan c và có được một giá trị trả về từ phương thức đó.

Ví dụ

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

và javascript

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

Và tôi nghi ngờ rằng đây bạn có thể muốn làm ngược lại (Gọi phương pháp obj-c từ javascript). Điều này không thể được thực hiện trực tiếp ở đây là công việc xung quanh.

Đặt UIWebViewDelegate và triển khai phương thức webView: shouldStartLoadWithRequest: navigationType :. Trong mã JavaScript của bạn, điều hướng đến một số URL giả mã hóa thông tin bạn muốn chuyển tới ứng dụng của bạn, chẳng hạn như: window.location = "someLink: // yourApp/form_Submitted: param1: param2: param3"; Trong phương thức ủy nhiệm của bạn, hãy tìm các URL giả mạo này, trích xuất thông tin bạn cần, thực hiện bất kỳ hành động nào là thích hợp và trả lại NO để hủy điều hướng.

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

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

    return YES; 
} 
+1

Cảm ơn! Người đầu tiên có vẻ dễ hiểu hơn đối với tôi. – Michael

1

Nếu tôi hiểu chính xác vấn đề của bạn, tôi nghĩ các bước sau sẽ giúp bạn cung cấp giải pháp.

  1. Trong hành động biểu mẫu, bạn cần phải ghi URL vào dịch vụ web.
  2. Trong biểu mẫu của bạn, tên của trường nhập phải khớp với tên của các tham số được mong đợi cho dịch vụ web.
  3. Trong điều khiển Điều hướng UIWebView đầu tiên của bạn, Tạo đối tượng của màn hình có UIWebView thứ hai và đặt phản hồi của dịch vụ web cho thành viên đối tượng của đối tượng.
  4. Trong kiểm soát UIWebView Navigation đầu tiên của bạn, bạn cần phải viết
    [self presentModalViewController:webView2Object animated:YES];
  5. Trong màn hình của việc có webView2, phân tích phản ứng trước khi tải UIWebView thứ hai. và tiêm nó với trang được hiển thị bằng javascript.
+1

Điều đó có nghĩa là tôi phải đưa yêu cầu vào biểu mẫu? Vì toàn bộ biểu mẫu nằm trong uiwebview, làm thế nào tôi có thể lấy lại kết quả cho một uiview (như một danh sách trong dạng xem bảng)? – Michael

+0

Nếu bạn giữ tên của các yếu tố đầu vào trong biểu mẫu giống như tên của thông số cho URL dịch vụ web của bạn, tham số sẽ tự động được đặt bằng URL của bạn và sẽ được gửi tới URL đó. Sau đó nó sẽ bắt đầu tải trang mới, bạn có thể kiểm tra nó bên trong phương thức ủy nhiệm webViewDidStartLoad. – Naved