22

WebViewではなく、アプリの外でSafariでURLを開きたいです。

UIWebViewDelegateを実装しましたが、まだ URL を開くことができません。基本的にURLをクリックできません。

以下はコードです:

-(void)newView:(NSString *)title Description:(NSString *)desc URL:(NSString *)url{
    webView =[[UIWebView alloc]initWithFrame:CGRectMake(15, 17, 190, 190)];
    webView.backgroundColor=[UIColor clearColor];
    webView.delegate=self;
    webView.opaque = NO;
    [webView loadHTMLString:[NSString stringWithFormat:@"<html><body p style='color:white' text=\"#FFFFFF\" face=\"Bookman Old Style, Book Antiqua, Garamond\" size=\"5\">%@ %@</body></html>", desc,url] baseURL:nil];

    v = [[HUDView alloc] initWithFrame:CGRectMake(60, 70, 220, 220)];

    cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
    cancelButton.frame = CGRectMake(0, 0, 30, 30);
    [cancelButton setBackgroundImage:[UIImage imageNamed:@"closebox.png"] forState:UIControlStateNormal];
    [cancelButton addTarget:self action:@selector(cancelButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [v addSubview:cancelButton];
    [v addSubview:webView];
    [self.view addSubview:v];  
}

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked ) {
        [[UIApplication sharedApplication] openURL:[inRequest URL]];
        return NO;
    }

    return YES;
}
4

10 に答える 10

44

この回答は、Google からすぐに入手できました。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]];

それをボタンを押すか、それを呼び出したいイベントに入れ、URL を渡します (@"http://www.apple.com" を置き換えます)。

于 2012-07-17T14:36:52.087 に答える
42

コメントを読んだ後、これがあなたが探しているものだと思います:

このメソッドを実装します。

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

fromUIWebViewDelegateおよびそのリクエスト引数に応じて、TRUEまたはを返す必要がありFALSEます。Web ビューで開かないようにするには、次のように呼び出します。

[[UIApplication sharedApplication] openURL:request.URL];

他の人が述べたように、返品してFALSEください。

お役に立てれば。乾杯!

編集:リンクがWebビューで認識されない場合は、これを試してください:

[webView setDataDetectorTypes:UIDataDetectorTypeLink]
于 2012-07-17T15:08:04.820 に答える
8
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com"]];
于 2012-07-17T14:37:57.227 に答える
5

iOS 10 以降の場合

// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];

// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)

詳細については、これを参照してください

于 2016-12-10T06:54:32.970 に答える
3

これは私のために働く:

[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: @"http://www.apple.com"]];
于 2014-06-14T19:31:22.567 に答える
2
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

    if (![[NSString stringWithFormat:@"%@",[request URL]] containsString:@"file"] ) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;
}

ローカルでhtmlファイルを使用しました。この html にはいくつかのリンクがあります。デリゲート UIWebViewDelegate を設定し、このローカル html を使用すると、webView で開き、他のリンクが safari で開き
ます。このリンクは「file:///Users/~/x.app/about.html」であるため、「file」と書きました。ローカルで。

于 2015-05-20T11:37:33.860 に答える
1

******************** スイフト **********************

//MARK: ボタンをクリックして SafariViewController で開く

private var urlString:String = "https://google.com"

@IBAction func openWithSafariVC(sender: AnyObject)
{

    let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
    svc.delegate = self
    self.presentViewController(svc, animated: true, completion: nil)
}

//MARK: SafatriViewConroller を無視

func safariViewControllerDidFinish(controller: SFSafariViewController)
{

    controller.dismissViewControllerAnimated(true, completion: nil)
}
于 2015-10-02T12:04:41.983 に答える
1

Google でこの回答を見つけましたが、ブラウザを開いた後、アプリケーションを終了してブラウザを続行する必要があります。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://google.com"] options: @{} completionHandler: nil];

Android でできること 簡単にメソッドを呼び出すfinish()方法

于 2017-05-20T08:35:31.210 に答える