Dentro de un (BOOL) webView: cómo abrir una URL que se hace clic en UIWebView que abre un UIWebView modal

Gracias por ver mi pregunta. Déjame describir la aplicación primero. Tengo una aplicación basada en barra de tabs para iOS5.1 que usa storyboard y ARC. Hay cuatro tabs con un controller de vista en cada una que muestra una vista web con files HTML locales (cada vista es un set diferente de files html para mostrar).

Actualmente, cuando un usuario toca un enlace http o https, se abrirá en Safari. Sin embargo, ahora quiero que se abra dentro de la aplicación a través de una vista modal. Actualmente tengo la interfaz creada y list para mostrar, pero no puedo pasar la URL a la modal "webview2". He buscado muchos ejemplos para hacer esto usando RSURL y cadenas, etc., pero no puedo hacer que ninguno de ellos funcione. Algo del código de ejemplo dado no parece funcionar para mi situación.

En mi file FirstViewController.m (que es el mismo en las otras vistas), tengo …

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { //Gets the link. if (navigationType == UIWebViewNavigationTypeLinkClicked) { NSURL *URL = [request URL]; NSLog(@"url:%@",request); //Get's the url itself //If it's an external link... if ([[URL scheme] isEqualToString:@"http"] || [[URL scheme] isEqualToString: @"https" ]) { [[UIApplication shanetworkingApplication] openURL:[request URL]]; NSLog(@"Opened in Safari"); return NO; } //If it's an email address... else if ([[URL scheme] isEqualToString:@"mailto"]) { [webView loadRequest:request]; [[UIApplication shanetworkingApplication] openURL:[request URL]]; NSLog(@"Opened in Mail App"); return NO; } } return YES; } 

Lo cual funciona bien si quiero que se abra la URL en Safari. Entonces en esta parte …

 //If it's an external link... if ([[URL scheme] isEqualToString:@"http"] || [[URL scheme] isEqualToString: @"https" ]) { [[UIApplication shanetworkingApplication] openURL:[request URL]]; NSLog(@"Opened in Safari"); return NO; } 

Lo necesito para abrir una vista modal con la URL presionada, no con Safari.

Entonces, lo que estoy preguntando es … ¿Cuál es la mejor manera de get esta URL guardada, luego abrir la vista modal y luego en la vista web modal abrir la URL que acabo de tocar?

Ya tengo la vista modal realizada con un button de rechazo y etc. Solo necesito cargar con la URL seleccionada cuando se carga.

Puedo cargar el modal a través de la línea …

 [self performSegueWithIdentifier:@"ModalWebView" sender:self]; 

pero eso solo lo carga sin ninguna información de URL y una vista en blanco, por supuesto. El modal usa WebViewController.h / m.

Si alguien pudiera decirme cómo abrir y pasar la URL para que se cargue en la segue "ModalWebView", lo agradecería. Por favor, hágamelo saber si necesito hacer alguna propiedad o cualquier otra cosa que debería include en mi WebViewController.h / m que ejecuta la vista modal. Quizás – (void) prepare ForSegue necesita ser utilizado? ¿Si es así, cómo?

Me doy count de que la respuesta puede ser simple, pero sigo siendo un principiante y he pasado días intentando encontrar una respuesta clara. He encontrado respuestas a muchas de mis preguntas en este sitio buscando antes, pero me temo que estoy atrapado en esta.

gracias por tu time y paciencia.

En el controller de vista, implemente el método prepareForSegue y agregue el siguiente código.

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSLog(@"Source Controller = %@", [segue sourceViewController]); NSLog(@"Destination Controller = %@", [segue destinationViewController]); NSLog(@"Segue Identifier = %@", [segue identifier]); if ([segue.identifier isEqualToString:@"ModalWebView"]) { ModalWebViewController *wVC = [segue destinationViewController]; wVC.url = [NSURL URLWithString:article.url]; // replace article.url with your url. } } 

En mi código anterior, la URL que se utilizará se establece desde mi object article.url. Para que esto funcione, debe get la url del método shouldStartLoadWithRequest .

 // CurrentViewController.h @property (strong, nonatomic) NSURL *targetUrl; // CurrentViewController.m //If it's an external link... if ([[URL scheme] isEqualToString:@"http"] || [[URL scheme] isEqualToString: @"https" ]) { targetUrl = url; [self performSegueWithIdentifier:@"ModalWebView" sender:self]; return NO; } 

Si usa lo anterior, ahora reemplazamos article.url en el primer bloque de código con targetUrl.

 if ([segue.identifier isEqualToString:@"ModalWebView"]) { ModalWebViewController *wVC = [segue destinationViewController]; wVC.url = targetUrl; } 

En su controller de vista para su file web modal view.h, cree un NSURL.

 //ModalWebViewController.h @property (strong, nonatomic) NSURL *url; 

En su file de implementación (.m) cree el método viewDidAppear

 //ModalWebViewController.m -(void) viewDidAppear:(BOOL)animated { [_webView loadRequest:[NSURLRequest requestWithURL:url]]; } 

Espero haberte explicado lo suficiente para que puedas implementar.