UIWebView
内にUIViewController
を含むアプリがあります。次のような文字列としてWebサービスからHTMLをロードします。
self.webView loadHTMLString:_string baseURL:nil
この文字列のHTMLリンクを、アプリのUIWebViewではなくブラウザーで開くことはできますか?これどうやってするの?
私は、UIWebVIewを「ホスト」するUIViewControllerでこれを試しました。
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
動作していないようです...
何か案は?
UIWebView
のデリゲートをUIViewController
に設定しましたか?私の知る限り、コードに明らかに問題はありません。そのため、そのような小さなものである可能性があります。
これをクラスに追加します。
@interface yourViewController : UIViewController
<UIWebViewDelegate>
これをビューに追加するとロードされました
- (void)viewDidLoad
{
[description loadHTMLString:string baseURL:nil];
description.delegate = self;
}
これを.mファイルに追加します
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
return YES;
}
注意:
UIWebView *description;
@synthesize description;
その後、それはあなたが値する方法で完全に動作します.. !! :)
UIWebViewのdelegateをIViewControllerに設定してから、このUIWebviewメソッドを使用して、条件。たとえば、現在webviewの現在のURLはgoogle.comです。Gmailをクリックした場合、URLにはGmailの文字列が含まれています。以下のメソッドを使用して、Safariブラウザを開き、その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はiOS 9にSafari View Controllerを導入しました。SafariView Controllerは、ユーザーがSafariに期待するすべての機能を、アプリから離れることなくアプリに提供します。
まず、Safariサービスをインポートする必要があります
#import <SafariServices/SafariServices.h>
目的Cの場合:-
NSString *yourUrl = @"http://yourURL";
SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]];
[self presentViewController:svc animated:YES completion:nil];
Swiftの場合:-
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
self.presentViewController(svc, animated: true, completion: nil)
UIWebViewDelegateをすでに適切に設定している場合は、単に
self.webView loadHTMLString:_string baseURL:nil
self.webView.delegate = self;
うまくいくはず
この行を追加(self.webview.delegate = self;)
たとえば、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;