繁体   English   中英

IOS UIWebView:在safari中打开链接

[英]IOS UIWebView : opening links in safari

我创建了自定义类,文件是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文件的链接,我需要做些什么呢?

您需要在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;
}

实现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"]];

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是一种检查是否应该通过safari打开URL的方法(您可以根据域或其他方式进行检查)。 在最简单的情况下,始终调用openURL (删除if

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM