Xcode如何在Safari中打开target=_blank链接

3
我对Xcode不太熟悉...我有一个单页iOS应用程序,只有一个UIWebView打开特定的URL。 我希望页面内的任何带有target="_blank"的链接都在Safari中打开,而不是在应用程序内部打开。
请问有人能告诉我如何实现这个功能?(我已经到处搜索了),还有告诉我在哪些文件中放置代码?非常感谢!!
编辑
我在我的ViewController.m文件中实现了以下代码:
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // Add line below so that external links & PDFs will open in Safari.app
    webView.delegate = self;

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.com/"]]];

}

// Add section below so that external links & PDFs will open in Safari.app
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return false;
    }
    return true;
}

但是在这行 webView.delegate = self; 上,我得到了一个黄色的警告,上面写着:

将“id”赋值给不兼容的类型“UIWebViewViewController *const_strong”

这个错误是什么意思,我该如何在Xcode中修复它?

2个回答

1

也许以下SO上的答案可以解决您的问题,或者至少给您一些关于如何实现您正在尝试做的事情的想法: UIWebView在Safari中打开链接


我在原始问题中更新的代码对我有用,但你能帮我解决这个错误吗? - adamdehaven
1
WebView的委托属性webView.delegate的类型是id<UIWebViewDelegate>,与self的类型不匹配,self是ViewController(在您的情况下,我认为类名是UIWebViewViewController,这是基于您评论中的异常)。您可以通过以下一种或两种方式来解决此问题:要么以以下方式将Self强制转换:webView.delegate = (id)self;,要么在类(.h文件)中声明委托:@interface ViewController : UIViewController <UIWebViewDelegate>。如果这不能帮助您,请告诉我。 - Rohit Gupta

0

这是我们解决问题的方式:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    first.delegate = (id)self;
                [first loadRequest:[NSURLRequest requestWithURL:[NSURL      URLWithString:@"http://www.website.com"]]];
}

// Add section below so that external links & PDFs will open in Safari.app
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request     navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeOther) {
        NSString *checkURL = @"http://www.linkyouwanttogotoviasafari.com";
        NSString *reqURL = request.URL.absoluteString;
        if ([reqURL isEqualToString:checkURL])
             {
                 [[UIApplication sharedApplication] openURL:request.URL];
            return false;
    }
        else {
            return true;
        }
    }
    return true;
}

1
这只适用于您知道要在Safari中打开的确切URL,无法处理任何将target="_blank"设置在通用链接上的情况。 - Russ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接