iOS UIWebView:在Safari中打开链接

3

我创建了自定义类,文件名为showBlock.h和showBlock.m,用于以编程方式加载UIWebView。showBlock.m的实现如下:

#import "showBlock.h"

@implementation showBlock;

@synthesize mainViewContObj;

- (void) showView {
    UIWebView *aWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    aWebView.autoresizesSubviews = YES;
    aWebView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
    [aWebView setDelegate:[self mainViewContObj]];
    NSString *urlAddress = @"http://localhost/test/index.php";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [aWebView loadRequest:requestObj];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    [[[self mainViewContObj] view] addSubview:aWebView];

}
@end

它正常工作,并加载具有HTML内容的index.php文件,但我想在Safari浏览器中打开此HTML文件的链接,我需要做哪些事情?

3个回答

11
你需要在ShowBlock.m文件中添加以下委托方法的实现。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType {
    // This practically disables web navigation from the webView.
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return FALSE;
    }
    return TRUE;
}

我需要做额外的事情吗?因为只是在ShowBlock.m中添加了这个方法,我的链接仍然在同一框架中打开。 - Pankaj Khairnar

1

实现 UIWebViewDelegate 协议并设置 aWebView.delegate = self

然后实现

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

当链接被点击时,将调用此函数。从请求中获取URL。

使用以下代码在Safari中打开链接:

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

仅仅这样是不够的。什么会触发这段代码?你需要使用UIWebViewDelegate。 - esreli
@EliGregory已更新。现在描述了代码将触发的条件。 - PKeno

1
在你的 UIWebView 代理中,定义 webView:shouldStartLoadWithRequest 方法:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {

    if ([[request URL] checkCondition]) 
       [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;

}

checkCondition 是一种检查 URL 是否应该由 Safari 打开的方法(您可以基于域名或其他内容进行检查)。在最简单的情况下,始终调用 openURL(删除 if)。


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