2011-12-07 20 views
8

Estoy tratando de escuchar un evento (específicamente un clic de botón) desde una página web que abrí en UIWebView en mi aplicación iOS. Sé que en otros idiomas hay formas de adjuntar detectores de eventos a determinadas llamadas web, pero aún no he encontrado la manera de hacerlo en Objective-C. Tampoco he encontrado a nadie en línea que lo diga no puede hacerse, así que decidí que debería preguntar. Vi en la documentación que puedes hacer llamadas de Objective-C desde Javascript, pero no tengo el control de la página web que quiero monitorear. Entonces necesito una solución que me permita escuchar este evento por completo en Objective-C.Escuchar eventos en un UIWebView (iOS)

EDITAR: Si los detalles ayudarían, estoy tratando de permitir al usuario hacer un poste mural en Facebook. Estoy cargando la página del compartidor de Facebook en una UIWebview (http://www.facebook.com/sharer/sharer.php?u=) y quiero monitorear cuando el usuario hace clic en "Compartir enlace" para poder cerrar la vista web .

¡Gracias a todos por su tiempo!

+0

que se ha encontrado una solución a esto? – user1282931

+0

@ user1282931 Desafortunadamente no. – WendiKidd

Respuesta

11

Puede utilizar el UIWebViewDelegate:

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

Los valores UIWebViewNavigationType son:

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

puede comprobar esto y luego mirar el NSURLRequest para obtener información sobre que

+0

Implementé esa función y se llama al método cuando se cargan las páginas web. Lamentablemente, no se llama * cuando se hace clic en el botón. – WendiKidd

+1

Oh, lo siento, soy un poco nuevo en esto y estaba tratando de usar "enter" para ir a una nueva línea, pero envió el comentario antes de que estuviera listo. ¡Lo siento! Para continuar, quizás ayudaría si di un poco más de información sobre el botón para el que estoy tratando de recibir eventos. Estoy intentando permitir que el usuario componga un wallpost de Facebook. Estoy abriendo la página de compartidor de Facebook (http://www.facebook.com/sharer/sharer.php?u=) y luego quiero monitorear cuando se presiona el botón "Compartir enlace" para poder cerrar la vista web. De lo contrario, parece como si nada hubiera pasado, incluso cuando el poste de la pared * está * hecho – WendiKidd

5

Usar una costumbre esquema. Cuando el usuario pulsa el botón, ping a una dirección URL con el esquema personalizado (myScheme: // buttonTapped) y, o bien:

  1. Catch esto en el método vistaweb delegado shouldStartLoadWithRequest... (es decir, comprobar si el URL contiene la combinación personalizada) y enrutarlo al selector de objetivo apropiado c. O

  2. Registre un protocolo de URL personalizado y configúrelo para manejar su esquema de URL personalizado. Algo así como el siguiente:

 
@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 
{ 

} 
Cuestiones relacionadas