2011-12-07 33 views
8

Tôi đang cố gắng nghe một sự kiện (cụ thể là một lần nhấp nút) từ một trang web mà tôi đã mở trong UIWebView trong ứng dụng iOS của mình. Tôi biết rằng trong các ngôn ngữ khác có nhiều cách để gắn trình nghe sự kiện vào một số cuộc gọi web nhất định, nhưng tôi chưa tìm ra cách để thực hiện nó trong Objective-C. Tôi cũng không tìm thấy ai trực tuyến nói rằng không thể được thực hiện, vì vậy tôi quyết định tôi nên hỏi. Tôi thấy trong tài liệu hướng dẫn mà bạn có thể thực hiện các cuộc gọi Objective-C từ Javascript, nhưng tôi không có quyền kiểm soát trang web mà tôi muốn theo dõi. Vì vậy, tôi cần một giải pháp cho phép tôi lắng nghe sự kiện này hoàn toàn trong Objective-C.Lắng nghe các sự kiện trong UIWebView (iOS)

EDIT: Nếu các chi tiết cụ thể sẽ hữu ích, tôi đang cố gắng cho phép người dùng tạo một wallpost trên Facebook. Tôi đang tải trang chia sẻ Facebook trong UIWebview (http://www.facebook.com/sharer/sharer.php?u=) và muốn theo dõi thời điểm người dùng nhấp vào "Chia sẻ liên kết" để tôi có thể đóng chế độ xem web .

Cảm ơn tất cả vì đã dành thời gian của bạn!

+0

từng tìm thấy giải pháp cho điều này? – user1282931

+0

@ user1282931 Thật không may là không. – WendiKidd

Trả lời

11

Bạn có thể sử dụng UIWebViewDelegate:

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

Các giá trị UIWebViewNavigationType là:

enum { 
    UIWebViewNavigationTypeLinkClicked, 
    UIWebViewNavigationTypeFormSubmitted, 
    UIWebViewNavigationTypeBackForward, 
    UIWebViewNavigationTypeReload, 
    UIWebViewNavigationTypeFormResubmitted, 
    UIWebViewNavigationTypeOther 
};typedef NSUInteger UIWebViewNavigationType; 

có thể kiểm tra điều này và sau đó nhìn vào NSURLRequest để nhận được thông tin về điều đó

+0

Tôi đã triển khai hàm đó và phương thức được gọi khi các trang web đang được tải. Thật không may, nó là * không * được gọi khi nút được nhấp. – WendiKidd

+1

Ồ, tôi xin lỗi, tôi là một chút mới với điều này và tôi đã cố gắng sử dụng "nhập" để đi xuống một dòng mới nhưng nó đã gửi bình luận trước khi tôi đã sẵn sàng. Lấy làm tiếc! Để tiếp tục, có lẽ nó sẽ giúp ích nếu tôi cung cấp thêm một chút thông tin về nút mà tôi đang cố gắng nhận sự kiện. Tôi đang cố gắng cho phép người dùng soạn một wallpost facebook. Tôi đang mở trang facebook sharer (http://www.facebook.com/sharer/sharer.php?u=) và sau đó muốn theo dõi khi nút "Share Link" được nhấn để tôi có thể đóng webview. Nếu không nó xuất hiện như thể không có gì xảy ra ngay cả khi wallpost * được * làm – WendiKidd

5

Sử dụng một tùy chỉnh kế hoạch. Khi người dùng chạm vào nút, ping một url với các chương trình tùy chỉnh (myScheme: // buttonTapped) và một trong hai:

  1. Catch này trong phương pháp webview đại biểu shouldStartLoadWithRequest... (tức là kiểm tra xem URL chứa chương trình tùy chỉnh của bạn) và định tuyến nó tới bộ chọn mục tiêu c thích hợp. Hoặc

  2. Đăng ký giao thức URL tùy chỉnh và thiết lập giao thức để xử lý lược đồ URL tùy chỉnh của bạn. Nội dung như sau:

 
@implementation MyURLProtocol 

+ (BOOL)canInitWithRequest:(NSURLRequest *)request 
{ 
    return [[[request URL] scheme] isEqualToString:@"myScheme"]; 
} 

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request 
{ 
    return request; 
} 

- (void)startLoading 
{ 
    NSURLRequest * request = [self request]; 
    id client = [self client]; 

    NSData * data = [NSMutableData dataWithCapacity:0]; 
    NSHTTPURLResponse * response = [[[NSHTTPURLResponse alloc] initWithURL:[request URL] statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:nil] autorelease]; 
    [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; 
    [client URLProtocol:self didLoadData:data]; 
    [client URLProtocolDidFinishLoading:self]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:kSchemeNotification object:nil userInfo:payload]; 
} 

- (void)stopLoading 
{ 

} 
Các vấn đề liên quan