我是制作iOS应用程序的初学者。我做了一个简单的Webview显示我的网页。问题是在我的网页中按下的每个链接都在webview中打开。我希望在野生动物园中打开一些链接。我希望在Webview中打开以“..something”开头的链接,并在safari中打开其他所有链接。我还有一个电子邮件和拨号按钮,我想在电话上的拨号应用程序和电子邮件应用程序中打开它。这有可能吗?请简单说明。
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (nonatomic, strong) IBOutlet UIWebView *webView;
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize webView;
- (void)viewDidLoad
{
NSURL *url = [NSURL URLWithString:@"http://MyWebPage"];
NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestURL];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
我使用下面的这段代码使用Java为Android制作了相同的应用程序
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try{
System.out.println("url called:::" + url);
if (url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
startActivity(intent);
} else if (url.startsWith("http:")
|| url.startsWith("https:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} else if (url.startsWith("mailto:")) {
MailTo mt=MailTo.parse(url);
send_email(mt.getTo());
}
else {
return false;
}
}catch(Exception e){
e.printStackTrace();
}
return true;
}
}
最佳答案
您需要将您的控制器设置为 UIWebViewDelegate
并实现webView: shouldStartLoadWithRequest:navigationType:
方法。
@interface ViewController () <UIWebViewDelegate>
viewDidLoad
应该看起来像这样:- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSURL *url = [NSURL URLWithString:@"http://MyWebPage"];
NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
webView.delegate = self;
[webView loadRequest:requestURL];
}
- (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked && [self shouldOpenInSafari:[inRequest URL]]) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
return YES;
}
- (BOOL)shouldOpenInSafari:(NSURL*)url
{
if ([url.scheme isEqualToString:@"mailto"]) {
return YES;
}
else if ([url.scheme isEqualToString:@"tel"]) {
return YES;
}
else if (([url.scheme isEqualToString:@"http"] || [url.scheme isEqualToString:@"https"]) && [url.host isEqualToString:@"example.com"]) {
return YES;
}
return NO;
}
然后,您需要实现
shouldOpenInSafari:
方法。 openURL:
方法还可以处理tel:
和mailto:
链接。来自here的一些代码。