J'ai une application avec une UIWebView
dans une UIViewController
. Je charge du HTML depuis un service Web sous forme de chaîne comme celle-ci:
self.webView loadHTMLString:_string baseURL:nil
Est-il possible que les liens HTML de cette chaîne soient ouverts dans le navigateur et non dans UIWebView dans mon application? Comment puis-je faire ceci?
J'ai essayé ceci dans UIViewController qui "héberge" le UIWebVIew:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
Cela ne semble pas fonctionner ....
Des idées?
Avez-vous défini le délégué de la UIWebView
sur votre UIViewController
? D'après ce que je peux voir, votre code n'a rien qui cloche, il est donc probable qu'il s'agisse d'un problème aussi petit.
Ajoutez ceci en classe ..
@interface yourViewController : UIViewController
<UIWebViewDelegate>
Ajouter ceci dans View as load
- (void)viewDidLoad
{
[description loadHTMLString:string baseURL:nil];
description.delegate = self;
}
Ajoutez ceci dans votre fichier .m
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
return YES;
}
Remarque:
UIWebView *description;
@synthesize description;
Ensuite, cela fonctionnera parfaitement comme vous le méritez .. !! :)
Définissez le délégué du UIWebView sur votre UIViewController après avoir utilisé cette méthode UIWebview et vérifiez la condition. Par exemple, l'URL actuelle de Webview est google.com, si vous avez cliqué sur Gmail l'URL contient la chaîne avec Gmail. Utilisez la méthode ci-dessous pour ouvrir un navigateur Safari et charger automatiquement cette URL.
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
NSURL *url = [inRequest URL];
if ([[url absoluteString] rangeOfString:@"gmail"].location == NSNotFound) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
}
return YES;
}
Apple a introduit Safari View Controller sur iOS 9. Safari View Controller apporte toutes les fonctionnalités que l'utilisateur attend de Safari à votre application sans même la quitter.
Nous devons d'abord importer les services Safari
#import <SafariServices/SafariServices.h>
Pour l'objectif C: -
NSString *yourUrl = @"http://yourURL";
SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]];
[self presentViewController:svc animated:YES completion:nil];
Pour Swift: -
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
self.presentViewController(svc, animated: true, completion: nil)
Si vous avez déjà configuré correctement UIWebViewDelegate, il suffit de faire
self.webView loadHTMLString:_string baseURL:nil
self.webView.delegate = self;
devrait marcher
Ajouter cette ligne ( Self.webview.delegate = self; )
Par exemple dans viewController.m
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[self.webview loadHTMLString:htmlString baseURL:nil];
self.webview.delegate = self;